Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save Lusamine/2fcfcff94ee365b78e16739c1115d86d to your computer and use it in GitHub Desktop.
Save Lusamine/2fcfcff94ee365b78e16739c1115d86d to your computer and use it in GitHub Desktop.
int32_t __fastcall Dpr_Battle_Logic_Capture__calcCaptureIndicator(
Dpr_Battle_Logic_MainModule_o *mainModule,
Dpr_Battle_Logic_BattleEnv_o *battleEnv,
Dpr_Battle_Logic_BTL_POKEPARAM_o *userPoke,
Dpr_Battle_Logic_BTL_POKEPARAM_o *targetPoke,
uint16_t itemID,
int32_t captureValueCoef)
{
int target_max_hp; // w28
float hp_mod; // s0
int32_t v14; // w25
uint32_t ZukanCapturedCount; // w0
int v16; // w12
int v17; // w11
int v18; // w10
int v19; // w9
int32_t v20; // w1
uint16_t MonsNo; // w27
int32_t m_formNo; // w26
uint32_t species_catch_rate; // w0 MAPDST
unsigned int m_weight; // w8
int v26; // w10
int v27; // w8
int v28; // w8
int32_t v29; // w27
int32_t v30; // w25
int32_t BallCaptureRatio; // w0 MAPDST
int v33; // w21 MAPDST
int32_t v34; // w1
int32_t v35; // w0
bool v36; // zf
unsigned int targetPokeLevel; // w8
uint32_t PokeSick; // w0
int32_t v40; // w1
int32_t numerator[2]; // [xsp+0h] [xbp-60h] BYREF
if ( (byte_7104ED562F & 1) == 0 )
{
sub_710009AD20(10883LL);
byte_7104ED562F = 1;
}
*(_QWORD *)numerator = 0LL;
target_max_hp = 3 * Dpr_Battle_Logic_BTL_POKEPARAM__GetValue(targetPoke, 15, 0LL);
hp_mod = (float)(unsigned int)(target_max_hp - 2 * Dpr_Battle_Logic_BTL_POKEPARAM__GetValue(targetPoke, 13, 0LL));
v14 = Dpr_Battle_Logic_FX32__CONST_485362011504(hp_mod, 0LL);
if ( Dpr_Battle_Logic_MainModule__GetSetupStatusFlag(mainModule, 4, 0LL) )
{
ZukanCapturedCount = Dpr_Battle_Logic_MainModule__GetZukanCapturedCount(mainModule, 0LL);
if ( ZukanCapturedCount >= 31 )
v16 = 2048;
else
v16 = 1229;
if ( ZukanCapturedCount <= 150 )
v17 = v16;
else
v17 = 2867;
if ( ZukanCapturedCount <= 300 )
v18 = v17;
else
v18 = 3277;
if ( ZukanCapturedCount <= 450 )
v19 = v18;
else
v19 = 3686;
if ( ZukanCapturedCount <= 600 )
v20 = v19;
else
v20 = 4096;
v14 = Dpr_Battle_Logic_FX32__Mul(v14, v20, 0LL);
}
MonsNo = Dpr_Battle_Logic_BTL_POKEPARAM__GetMonsNo(targetPoke, 0LL);
m_formNo = targetPoke->fields.m_formNo;
if ( (Dpr_Battle_Logic_calc_TypeInfo->_2.bitflags2 & 2) != 0 && !Dpr_Battle_Logic_calc_TypeInfo->_2.cctor_finished )
sub_710009AE30((__int64)Dpr_Battle_Logic_calc_TypeInfo);
species_catch_rate = Dpr_Battle_Logic_calc__PERSONAL_GetParam(MonsNo, m_formNo, 8, 0LL);
if ( itemID == 5 )
{
v29 = Dpr_Battle_Logic_BattleCounter__Get(battleEnv->fields.m_counter, 2u, 0LL);
if ( (Dpr_Battle_Logic_Safari_TypeInfo->_2.bitflags2 & 2) != 0
&& !Dpr_Battle_Logic_Safari_TypeInfo->_2.cctor_finished )
{
sub_710009AE30((__int64)Dpr_Battle_Logic_Safari_TypeInfo);
}
Dpr_Battle_Logic_Safari__GetSafariGetRatio(v29, &numerator[1], numerator, 0LL);
species_catch_rate = (int)(numerator[1] * species_catch_rate) / numerator[0];
}
else if ( itemID == 495 )
{
m_weight = targetPoke->fields.m_weight;
if ( m_weight >= 3000 )
v26 = 30;
else
v26 = 20;
if ( m_weight < 2000 )
v26 = 0;
if ( m_weight >= 1000 )
v27 = v26;
else
v27 = -20;
v28 = v27 + species_catch_rate;
if ( v28 <= 1 )
species_catch_rate = 1;
else
species_catch_rate = v28;
}
v30 = species_catch_rate * v14;
BallCaptureRatio = Dpr_Battle_Logic_Capture__getBallCaptureRatio(mainModule, battleEnv, userPoke, targetPoke, itemID);
if ( itemID == 851 )
{
v33 = Dpr_Battle_Logic_FX32__Mul(v30, BallCaptureRatio, 0LL) / target_max_hp;
}
else
{
if ( Dpr_Battle_Logic_UltraBeast__IsUltraBeast_485368872736(&targetPoke, 0LL) )
v34 = 410;
else
v34 = BallCaptureRatio;
v35 = Dpr_Battle_Logic_FX32__Mul(v30, v34, 0LL);
v36 = itemID == 5;
v33 = v35 / target_max_hp;
if ( v36 )
return Dpr_Battle_Logic_FX32__Mul(v33, captureValueCoef, 0LL);
}
targetPokeLevel = (unsigned __int16)Dpr_Battle_Logic_BTL_POKEPARAM__GetValue(targetPoke, 17, 0LL);
if ( targetPokeLevel <= 20 )
v33 = (int)((30 - targetPokeLevel) * v33) / 10;
PokeSick = Dpr_Battle_Logic_BTL_POKEPARAM__GetPokeSick(targetPoke, 0LL);
if ( PokeSick <= 5 )
{
if ( ((1 << PokeSick) & 50) != 0 )
{
v40 = 0x1800;
LABEL_53:
v33 = Dpr_Battle_Logic_FX32__Mul(v33, v40, 0LL);
return Dpr_Battle_Logic_FX32__Mul(v33, captureValueCoef, 0LL);
}
if ( ((1 << PokeSick) & 0xC) != 0 )
{
v40 = 0x2800;
goto LABEL_53;
}
}
return Dpr_Battle_Logic_FX32__Mul(v33, captureValueCoef, 0LL);
}
-----
.text.1:0000007102170060 ; int32_t __fastcall Dpr_Battle_Logic_Capture__calcCaptureIndicator(Dpr_Battle_Logic_MainModule_o *mainModule, Dpr_Battle_Logic_BattleEnv_o *battleEnv, Dpr_Battle_Logic_BTL_POKEPARAM_o *userPoke, Dpr_Battle_Logic_BTL_POKEPARAM_o *targetPoke, uint16_t itemID, int32_t captureValueCoef)
.text.1:0000007102170060 Dpr.Battle.Logic.Capture$$calcCaptureIndicator
.text.1:0000007102170060 ; CODE XREF: Dpr.Battle.Logic.Capture$$JudgeCapture+9C↑p
.text.1:0000007102170060 ; DATA XREF: .data:00000071049990D8↓o
.text.1:0000007102170060
.text.1:0000007102170060 numerator = -0x60
.text.1:0000007102170060 poke = -0x58
.text.1:0000007102170060 var_50 = -0x50
.text.1:0000007102170060 var_40 = -0x40
.text.1:0000007102170060 var_30 = -0x30
.text.1:0000007102170060 var_20 = -0x20
.text.1:0000007102170060 var_10 = -0x10
.text.1:0000007102170060 var_s0 = 0
.text.1:0000007102170060
.text.1:0000007102170060 SUB SP, SP, #0x70
.text.1:0000007102170064 STP X28, X27, [SP,#0x60+var_50]
.text.1:0000007102170068 STP X26, X25, [SP,#0x60+var_40]
.text.1:000000710217006C STP X24, X23, [SP,#0x60+var_30]
.text.1:0000007102170070 STP X22, X21, [SP,#0x60+var_20]
.text.1:0000007102170074 STP X20, X19, [SP,#0x60+var_10]
.text.1:0000007102170078 STP X29, X30, [SP,#0x60+var_s0]
.text.1:000000710217007C ADD X29, SP, #0x60
.text.1:0000007102170080 ADRP X25, #byte_7104ED562F@PAGE
.text.1:0000007102170084 LDRB W8, [X25,#byte_7104ED562F@PAGEOFF]
.text.1:0000007102170088 MOV W19, W5
.text.1:000000710217008C MOV W21, W4
.text.1:0000007102170090 MOV X20, X3
.text.1:0000007102170094 MOV X22, X2
.text.1:0000007102170098 MOV X23, X1
.text.1:000000710217009C MOV X24, X0
.text.1:00000071021700A0 TBNZ W8, #0, loc_71021700BC
.text.1:00000071021700A4 ADRP X8, #off_7104BDE9B0@PAGE
.text.1:00000071021700A8 LDR X8, [X8,#off_7104BDE9B0@PAGEOFF]
.text.1:00000071021700AC LDR W0, [X8]
.text.1:00000071021700B0 BL sub_710009AD20
.text.1:00000071021700B4 MOV W8, #1
.text.1:00000071021700B8 STRB W8, [X25,#byte_7104ED562F@PAGEOFF]
.text.1:00000071021700BC
.text.1:00000071021700BC loc_71021700BC ; CODE XREF: Dpr.Battle.Logic.Capture$$calcCaptureIndicator+40↑j
.text.1:00000071021700BC MOV X0, X20 ; this
.text.1:00000071021700C0 MOV W1, #15 ; vid
.text.1:00000071021700C4 STR XZR, [SP]
.text.1:00000071021700C8 MOV X2, XZR ; method
.text.1:00000071021700CC BL Dpr.Battle.Logic.BTL_POKEPARAM$$GetValue
.text.1:00000071021700D0 ADD W28, W0, W0,LSL#1
.text.1:00000071021700D4 MOV W1, #13 ; vid
.text.1:00000071021700D8 MOV X0, X20 ; this
.text.1:00000071021700DC MOV X2, XZR ; method
.text.1:00000071021700E0 BL Dpr.Battle.Logic.BTL_POKEPARAM$$GetValue
.text.1:00000071021700E4 SUB W8, W28, W0,LSL#1
.text.1:00000071021700E8 MOV X0, XZR ; method
.text.1:00000071021700EC UCVTF D0, W8
.text.1:00000071021700F0 FCVT S0, D0 ; x
.text.1:00000071021700F4 BL Dpr.Battle.Logic.FX32$$CONST_485362011504
.text.1:00000071021700F8 MOV W25, W0
.text.1:00000071021700FC MOV X0, X24 ; this
.text.1:0000007102170100 MOV W1, #4 ; flag
.text.1:0000007102170104 MOV X2, XZR ; method
.text.1:0000007102170108 BL Dpr.Battle.Logic.MainModule$$GetSetupStatusFlag
.text.1:000000710217010C TBZ W0, #0, loc_710217016C
.text.1:0000007102170110 MOV X0, X24 ; this
.text.1:0000007102170114 MOV X1, XZR ; method
.text.1:0000007102170118 BL Dpr.Battle.Logic.MainModule$$GetZukanCapturedCount
.text.1:000000710217011C CMP W0, #0x1F
.text.1:0000007102170120 MOV W12, #0x800
.text.1:0000007102170124 MOV W13, #0x4CD
.text.1:0000007102170128 MOV W11, #0xB33
.text.1:000000710217012C CSEL W12, W13, W12, CC
.text.1:0000007102170130 CMP W0, #0x96
.text.1:0000007102170134 MOV W10, #0xCCD
.text.1:0000007102170138 CSEL W11, W11, W12, HI
.text.1:000000710217013C CMP W0, #0x12C
.text.1:0000007102170140 MOV W9, #0xE66
.text.1:0000007102170144 CSEL W10, W10, W11, HI
.text.1:0000007102170148 CMP W0, #0x1C2
.text.1:000000710217014C MOV W8, #0x1000
.text.1:0000007102170150 CSEL W9, W9, W10, HI
.text.1:0000007102170154 CMP W0, #0x258
.text.1:0000007102170158 CSEL W1, W8, W9, HI ; v2
.text.1:000000710217015C MOV W0, W25 ; v1
.text.1:0000007102170160 MOV X2, XZR ; method
.text.1:0000007102170164 BL Dpr.Battle.Logic.FX32$$Mul
.text.1:0000007102170168 MOV W25, W0
.text.1:000000710217016C
.text.1:000000710217016C loc_710217016C ; CODE XREF: Dpr.Battle.Logic.Capture$$calcCaptureIndicator+AC↑j
.text.1:000000710217016C MOV X0, X20 ; this
.text.1:0000007102170170 MOV X1, XZR ; method
.text.1:0000007102170174 BL Dpr.Battle.Logic.BTL_POKEPARAM$$GetMonsNo
.text.1:0000007102170178 ADRP X8, #off_7104BA54B0@PAGE
.text.1:000000710217017C LDR X8, [X8,#off_7104BA54B0@PAGEOFF]
.text.1:0000007102170180 MOV W27, W0
.text.1:0000007102170184 LDR X0, [X8] ; Dpr.Battle.Logic.calc_TypeInfo
.text.1:0000007102170188 LDRB W26, [X20,#0x3D]
.text.1:000000710217018C LDRB W8, [X0,#0x12F]
.text.1:0000007102170190 TBZ W8, #1, loc_71021701A0
.text.1:0000007102170194 LDR W8, [X0,#0xE0]
.text.1:0000007102170198 CBNZ W8, loc_71021701A0
.text.1:000000710217019C BL sub_710009AE30
.text.1:00000071021701A0
.text.1:00000071021701A0 loc_71021701A0 ; CODE XREF: Dpr.Battle.Logic.Capture$$calcCaptureIndicator+130↑j
.text.1:00000071021701A0 ; Dpr.Battle.Logic.Capture$$calcCaptureIndicator+138↑j
.text.1:00000071021701A0 AND W0, W27, #0xFFFF ; mons_no
.text.1:00000071021701A4 MOV W1, W26 ; form_no
.text.1:00000071021701A8 MOV W2, #8 ; paramID
.text.1:00000071021701AC MOV X3, XZR ; method
.text.1:00000071021701B0 BL Dpr.Battle.Logic.calc$$PERSONAL_GetParam
.text.1:00000071021701B4 AND W8, W21, #0xFFFF
.text.1:00000071021701B8 MOV W26, W0
.text.1:00000071021701BC CMP W8, #5
.text.1:00000071021701C0 B.EQ loc_7102170204
.text.1:00000071021701C4 CMP W8, #0x1EF
.text.1:00000071021701C8 B.NE loc_7102170258
.text.1:00000071021701CC LDRH W8, [X20,#0x3A]
.text.1:00000071021701D0 CMP W8, #0xBB8
.text.1:00000071021701D4 MOV W10, #0x1E
.text.1:00000071021701D8 MOV W11, #0x14
.text.1:00000071021701DC CSEL W10, W11, W10, CC
.text.1:00000071021701E0 CMP W8, #0x7D0
.text.1:00000071021701E4 MOV W9, #0xFFFFFFEC
.text.1:00000071021701E8 CSEL W10, WZR, W10, CC
.text.1:00000071021701EC CMP W8, #0x3E8
.text.1:00000071021701F0 CSEL W8, W9, W10, CC
.text.1:00000071021701F4 ADD W8, W8, W26
.text.1:00000071021701F8 CMP W8, #1
.text.1:00000071021701FC CSINC W26, W8, WZR, GT
.text.1:0000007102170200 B loc_7102170258
.text.1:0000007102170204 ; ---------------------------------------------------------------------------
.text.1:0000007102170204
.text.1:0000007102170204 loc_7102170204 ; CODE XREF: Dpr.Battle.Logic.Capture$$calcCaptureIndicator+160↑j
.text.1:0000007102170204 LDR X0, [X23,#0x90] ; this
.text.1:0000007102170208 MOV W1, #2 ; counterID
.text.1:000000710217020C MOV X2, XZR ; method
.text.1:0000007102170210 BL Dpr.Battle.Logic.BattleCounter$$Get
.text.1:0000007102170214 ADRP X8, #off_7104BDE9B8@PAGE
.text.1:0000007102170218 LDR X8, [X8,#off_7104BDE9B8@PAGEOFF]
.text.1:000000710217021C MOV X27, X0
.text.1:0000007102170220 LDR X0, [X8] ; Dpr.Battle.Logic.Safari_TypeInfo
.text.1:0000007102170224 LDRB W8, [X0,#0x12F]
.text.1:0000007102170228 TBZ W8, #1, loc_7102170238
.text.1:000000710217022C LDR W8, [X0,#0xE0]
.text.1:0000007102170230 CBNZ W8, loc_7102170238
.text.1:0000007102170234 BL sub_710009AE30
.text.1:0000007102170238
.text.1:0000007102170238 loc_7102170238 ; CODE XREF: Dpr.Battle.Logic.Capture$$calcCaptureIndicator+1C8↑j
.text.1:0000007102170238 ; Dpr.Battle.Logic.Capture$$calcCaptureIndicator+1D0↑j
.text.1:0000007102170238 ADD X1, SP, #0x60+numerator+4 ; numerator
.text.1:000000710217023C MOV X2, SP ; denominator
.text.1:0000007102170240 MOV W0, W27 ; safari_get_count
.text.1:0000007102170244 MOV X3, XZR ; method
.text.1:0000007102170248 BL Dpr.Battle.Logic.Safari$$GetSafariGetRatio
.text.1:000000710217024C LDP W9, W8, [SP,#0x60+numerator]
.text.1:0000007102170250 MUL W8, W8, W26
.text.1:0000007102170254 SDIV W26, W8, W9
.text.1:0000007102170258
.text.1:0000007102170258 loc_7102170258 ; CODE XREF: Dpr.Battle.Logic.Capture$$calcCaptureIndicator+168↑j
.text.1:0000007102170258 ; Dpr.Battle.Logic.Capture$$calcCaptureIndicator+1A0↑j
.text.1:0000007102170258 MOV X0, X24 ; mainModule
.text.1:000000710217025C MOV X1, X23 ; battleEnv
.text.1:0000007102170260 MUL W25, W26, W25
.text.1:0000007102170264 MOV X2, X22 ; userPoke
.text.1:0000007102170268 MOV X3, X20 ; targetPoke
.text.1:000000710217026C STR X20, [SP,#0x60+poke]
.text.1:0000007102170270 MOV W4, W21 ; itemID
.text.1:0000007102170274 BL Dpr.Battle.Logic.Capture$$getBallCaptureRatio
.text.1:0000007102170278 AND W21, W21, #0xFFFF
.text.1:000000710217027C MOV W22, W0
.text.1:0000007102170280 CMP W21, #0x353
.text.1:0000007102170284 B.NE loc_71021702A0
.text.1:0000007102170288 MOV W0, W25 ; v1
.text.1:000000710217028C MOV W1, W22 ; v2
.text.1:0000007102170290 MOV X2, XZR ; method
.text.1:0000007102170294 BL Dpr.Battle.Logic.FX32$$Mul
.text.1:0000007102170298 SDIV W21, W0, W28
.text.1:000000710217029C B loc_71021702D0
.text.1:00000071021702A0 ; ---------------------------------------------------------------------------
.text.1:00000071021702A0
.text.1:00000071021702A0 loc_71021702A0 ; CODE XREF: Dpr.Battle.Logic.Capture$$calcCaptureIndicator+224↑j
.text.1:00000071021702A0 ADD X0, SP, #0x60+poke ; poke
.text.1:00000071021702A4 MOV X1, XZR ; method
.text.1:00000071021702A8 BL Dpr.Battle.Logic.UltraBeast$$IsUltraBeast_485368872736
.text.1:00000071021702AC TST W0, #1
.text.1:00000071021702B0 MOV W8, #0x19A
.text.1:00000071021702B4 CSEL W1, W8, W22, NE ; v2
.text.1:00000071021702B8 MOV W0, W25 ; v1
.text.1:00000071021702BC MOV X2, XZR ; method
.text.1:00000071021702C0 BL Dpr.Battle.Logic.FX32$$Mul
.text.1:00000071021702C4 CMP W21, #5
.text.1:00000071021702C8 SDIV W21, W0, W28
.text.1:00000071021702CC B.EQ loc_7102170360
.text.1:00000071021702D0
.text.1:00000071021702D0 loc_71021702D0 ; CODE XREF: Dpr.Battle.Logic.Capture$$calcCaptureIndicator+23C↑j
.text.1:00000071021702D0 MOV W1, #0x11 ; vid
.text.1:00000071021702D4 MOV X0, X20 ; this
.text.1:00000071021702D8 MOV X2, XZR ; method
.text.1:00000071021702DC BL Dpr.Battle.Logic.BTL_POKEPARAM$$GetValue
.text.1:00000071021702E0 AND W8, W0, #0xFFFF
.text.1:00000071021702E4 CMP W8, #0x14
.text.1:00000071021702E8 B.HI loc_7102170310
.text.1:00000071021702EC MOV W9, #0x1E
.text.1:00000071021702F0 SUB W8, W9, W8
.text.1:00000071021702F4 MOV W9, #0x66666667
.text.1:00000071021702FC MUL W8, W8, W21
.text.1:0000007102170300 SMULL X8, W8, W9
.text.1:0000007102170304 LSR X9, X8, #0x3F ; '?'
.text.1:0000007102170308 ASR X8, X8, #0x22 ; '"'
.text.1:000000710217030C ADD W21, W8, W9
.text.1:0000007102170310
.text.1:0000007102170310 loc_7102170310 ; CODE XREF: Dpr.Battle.Logic.Capture$$calcCaptureIndicator+288↑j
.text.1:0000007102170310 MOV X0, X20 ; this
.text.1:0000007102170314 MOV X1, XZR ; method
.text.1:0000007102170318 BL Dpr.Battle.Logic.BTL_POKEPARAM$$GetPokeSick
.text.1:000000710217031C CMP W0, #5
.text.1:0000007102170320 B.HI loc_7102170360
.text.1:0000007102170324 MOV W8, #1
.text.1:0000007102170328 LSL W8, W8, W0
.text.1:000000710217032C MOV W9, #0x32 ; '2'
.text.1:0000007102170330 TST W8, W9
.text.1:0000007102170334 B.EQ loc_7102170344
.text.1:0000007102170338 MOV W0, W21
.text.1:000000710217033C MOV W1, #0x1800
.text.1:0000007102170340 B loc_7102170354
.text.1:0000007102170344 ; ---------------------------------------------------------------------------
.text.1:0000007102170344
.text.1:0000007102170344 loc_7102170344 ; CODE XREF: Dpr.Battle.Logic.Capture$$calcCaptureIndicator+2D4↑j
.text.1:0000007102170344 TST W8, #0xC
.text.1:0000007102170348 B.EQ loc_7102170360
.text.1:000000710217034C MOV W1, #0x2800 ; v2
.text.1:0000007102170350 MOV W0, W21 ; v1
.text.1:0000007102170354
.text.1:0000007102170354 loc_7102170354 ; CODE XREF: Dpr.Battle.Logic.Capture$$calcCaptureIndicator+2E0↑j
.text.1:0000007102170354 MOV X2, XZR ; method
.text.1:0000007102170358 BL Dpr.Battle.Logic.FX32$$Mul
.text.1:000000710217035C MOV W21, W0
.text.1:0000007102170360
.text.1:0000007102170360 loc_7102170360 ; CODE XREF: Dpr.Battle.Logic.Capture$$calcCaptureIndicator+26C↑j
.text.1:0000007102170360 ; Dpr.Battle.Logic.Capture$$calcCaptureIndicator+2C0↑j ...
.text.1:0000007102170360 MOV W0, W21 ; v1
.text.1:0000007102170364 MOV W1, W19 ; v2
.text.1:0000007102170368 MOV X2, XZR ; method
.text.1:000000710217036C BL Dpr.Battle.Logic.FX32$$Mul
.text.1:0000007102170370 LDP X29, X30, [SP,#0x60+var_s0]
.text.1:0000007102170374 LDP X20, X19, [SP,#0x60+var_10]
.text.1:0000007102170378 LDP X22, X21, [SP,#0x60+var_20]
.text.1:000000710217037C LDP X24, X23, [SP,#0x60+var_30]
.text.1:0000007102170380 LDP X26, X25, [SP,#0x60+var_40]
.text.1:0000007102170384 LDP X28, X27, [SP,#0x60+var_50]
.text.1:0000007102170388 ADD SP, SP, #112
.text.1:000000710217038C RET
.text.1:000000710217038C ; End of function Dpr.Battle.Logic.Capture$$calcCaptureIndicator
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment