Why Nostr? What is Njump?
2023-06-09 12:44:12
in reply to

Pierre [ARCHIVE] on Nostr: 📅 Original date posted:2015-08-28 📝 Original message: Thanks, this helps a lot ...

📅 Original date posted:2015-08-28
📝 Original message:
Thanks, this helps a lot !

I have more questions after reviewing your new branch 'state', if you have
time for that ;-)

1) In PKT_UPDATE_ADD_HTLC, why is the field amount an int32 and not an
uint32 ? the value shouldn't be negative right ?

2) For a given payee, is the (simplified) htlc flow always :

A->B PKT_UPDATE_ADD_HTLC
B->A PKT_UPDATE_COMPLETE_HTLC
A->B PKT_UPDATE_ADD_HTLC
B->A PKT_UPDATE_COMPLETE_HTLC ?

can we have two successive PKT_UPDATE_ADD_HTLC with the same H, the latter
updating the former ? and then a single completion ?

3) Since an htlc is completed with a PKT_UPDATE_COMPLETE_HTLC, what is the
use case of PKT_UPDATE ?

4) Why is there no PKT_UPDATE_DECLINE ?

5) I understand the High/Low priorities are a way of resolving conflicts,
but I don't get how it works. Could you please explain the principle of it ?

6) In a closing by mutual consent, who is supposed to publish the final
transaction ?

7) How do we manage the fees ?

Thanks,

Pierre


2015-08-21 7:32 GMT+02:00 Rusty Russell <rusty at rustcorp.com.au>:

> Rusty Russell <rusty at rustcorp.com.au> writes:
> > Yeah. Let me generate a decent text flowchart for the normal cases...
>
> I've taken out some transitions for simplicity (eg. ERR_ANCHOR_LOST and
> ERR_INFORMATION_LEAK, which shouldn't happen):
>
> Normal opening states:
>
> INIT_NOANCHOR:
> INPUT_NONE -> OPEN_WAIT_FOR_OPEN_NOANCHOR (=>PKT_OPEN)
> INIT_WITHANCHOR:
> INPUT_NONE -> OPEN_WAIT_FOR_OPEN_WITHANCHOR (=>PKT_OPEN)
> OPEN_WAIT_FOR_OPEN_NOANCHOR:
> PKT_OPEN -> OPEN_WAIT_FOR_ANCHOR
> CMD_CLOSE -> CLOSED
> OPEN_WAIT_FOR_OPEN_WITHANCHOR:
> PKT_OPEN -> OPEN_WAIT_FOR_COMMIT_SIG (=>PKT_OPEN_ANCHOR)
> CMD_CLOSE -> CLOSED
> OPEN_WAIT_FOR_ANCHOR:
> PKT_OPEN_ANCHOR -> OPEN_WAITING_THEIRANCHOR (=>PKT_OPEN_COMMIT_SIG)
> CMD_CLOSE -> CLOSED
> OPEN_WAIT_FOR_COMMIT_SIG:
> PKT_OPEN_COMMIT_SIG -> OPEN_WAITING_OURANCHOR
> CMD_CLOSE -> CLOSED
> OPEN_WAITING_OURANCHOR:
> PKT_CLOSE -> WAIT_FOR_CLOSE_ACK (=>PKT_CLOSE_COMPLETE)
> BITCOIN_ANCHOR_DEPTHOK -> OPEN_WAIT_FOR_COMPLETE_OURANCHOR
> (=>PKT_OPEN_COMPLETE)
> BITCOIN_ANCHOR_THEIRSPEND -> CLOSE_WAIT_SPENDTHEM (=>PKT_ERROR)
> CMD_CLOSE -> WAIT_FOR_CLOSE_COMPLETE (=>PKT_CLOSE)
> OPEN_WAITING_THEIRANCHOR:
> PKT_CLOSE -> WAIT_FOR_CLOSE_ACK (=>PKT_CLOSE_COMPLETE)
> PKT_ERROR -> CLOSE_WAIT_OURCOMMIT
> BITCOIN_ANCHOR_DEPTHOK -> OPEN_WAIT_FOR_COMPLETE_THEIRANCHOR
> (=>PKT_OPEN_COMPLETE)
> BITCOIN_ANCHOR_TIMEOUT -> ERR_ANCHOR_TIMEOUT (=>PKT_ERROR)
> BITCOIN_ANCHOR_THEIRSPEND -> CLOSE_WAIT_SPENDTHEM (=>PKT_ERROR)
> CMD_CLOSE -> WAIT_FOR_CLOSE_COMPLETE (=>PKT_CLOSE)
>
> OPEN_WAIT_FOR_COMPLETE_OURANCHOR:
> PKT_OPEN_COMPLETE -> NORMAL_HIGHPRIO
> PKT_CLOSE -> WAIT_FOR_CLOSE_ACK (=>PKT_CLOSE_COMPLETE)
> PKT_ERROR -> CLOSE_WAIT_OURCOMMIT
> BITCOIN_ANCHOR_THEIRSPEND -> CLOSE_WAIT_SPENDTHEM (=>PKT_ERROR)
> CMD_CLOSE -> WAIT_FOR_CLOSE_COMPLETE (=>PKT_CLOSE)
>
> OPEN_WAIT_FOR_COMPLETE_THEIRANCHOR:
> PKT_OPEN_COMPLETE -> NORMAL_LOWPRIO
> PKT_CLOSE -> WAIT_FOR_CLOSE_ACK (=>PKT_CLOSE_COMPLETE)
> PKT_ERROR -> CLOSE_WAIT_OURCOMMIT
> BITCOIN_ANCHOR_THEIRSPEND -> CLOSE_WAIT_SPENDTHEM (=>PKT_ERROR)
> CMD_CLOSE -> WAIT_FOR_CLOSE_COMPLETE (=>PKT_CLOSE)
>
> Operational state loop:
> ======================
> I've folded high and low here, but we alternate.
>
> NORMAL_LOWPRIO:
> NORMAL_HIGHPRIO:
> PKT_UPDATE -> WAIT_FOR_UPDATE_SIG_LOWPRIO (=>PKT_UPDATE_ACCEPT)
> PKT_UPDATE_ADD_HTLC -> NORMAL_HIGHPRIO (=>PKT_UPDATE_DECLINE_HTLC)
> PKT_UPDATE_ADD_HTLC -> WAIT_FOR_UPDATE_SIG_LOWPRIO
> (=>PKT_UPDATE_ACCEPT)
> PKT_UPDATE_COMPLETE_HTLC -> WAIT_FOR_UPDATE_SIG_LOWPRIO
> (=>PKT_UPDATE_ACCEPT)
> PKT_UPDATE_TIMEDOUT_HTLC -> WAIT_FOR_UPDATE_SIG_LOWPRIO
> (=>PKT_UPDATE_ACCEPT)
> PKT_UPDATE_ROUTEFAIL_HTLC -> WAIT_FOR_UPDATE_SIG_LOWPRIO
> (=>PKT_UPDATE_ACCEPT)
> PKT_CLOSE -> WAIT_FOR_CLOSE_ACK (=>PKT_CLOSE_COMPLETE)
> PKT_ERROR -> CLOSE_WAIT_OURCOMMIT
> BITCOIN_ANCHOR_THEIRSPEND -> CLOSE_WAIT_SPENDTHEM (=>PKT_ERROR)
> BITCOIN_ANCHOR_OTHERSPEND -> CLOSE_WAIT_STEAL (=>PKT_ERROR)
> CMD_SEND_UPDATE -> WAIT_FOR_UPDATE_ACCEPT_LOWPRIO (=>PKT_UPDATE)
> CMD_SEND_HTLC_UPDATE -> WAIT_FOR_HTLC_ACCEPT_LOWPRIO
> (=>PKT_UPDATE_ADD_HTLC)
> CMD_SEND_HTLC_COMPLETE -> WAIT_FOR_HTLC_ACCEPT_LOWPRIO
> (=>PKT_UPDATE_COMPLETE_HTLC)
> CMD_SEND_HTLC_TIMEDOUT -> WAIT_FOR_HTLC_ACCEPT_LOWPRIO
> (=>PKT_UPDATE_TIMEDOUT_HTLC)
> CMD_SEND_HTLC_ROUTEFAIL -> WAIT_FOR_HTLC_ACCEPT_LOWPRIO
> (=>PKT_UPDATE_ROUTEFAIL_HTLC)
> CMD_CLOSE -> WAIT_FOR_CLOSE_COMPLETE (=>PKT_CLOSE)
>
> WAIT_FOR_HTLC_ACCEPT_LOWPRIO:
> WAIT_FOR_HTLC_ACCEPT_HIGHPRIO:
> PKT_UPDATE -> WAIT_FOR_UPDATE_SIG_LOWPRIO (=>PKT_UPDATE_ACCEPT)
> PKT_UPDATE_ADD_HTLC -> NORMAL_HIGHPRIO (=>PKT_UPDATE_DECLINE_HTLC)
> PKT_UPDATE_ADD_HTLC -> WAIT_FOR_UPDATE_SIG_LOWPRIO
> (=>PKT_UPDATE_ACCEPT)
> PKT_UPDATE_ACCEPT -> WAIT_FOR_UPDATE_COMPLETE_LOWPRIO
> (=>PKT_UPDATE_SIGNATURE)
> PKT_UPDATE_DECLINE_HTLC -> NORMAL_HIGHPRIO
> PKT_UPDATE_COMPLETE_HTLC -> WAIT_FOR_UPDATE_SIG_LOWPRIO
> (=>PKT_UPDATE_ACCEPT)
> PKT_UPDATE_TIMEDOUT_HTLC -> WAIT_FOR_UPDATE_SIG_LOWPRIO
> (=>PKT_UPDATE_ACCEPT)
> PKT_UPDATE_ROUTEFAIL_HTLC -> WAIT_FOR_UPDATE_SIG_LOWPRIO
> (=>PKT_UPDATE_ACCEPT)
> PKT_CLOSE -> WAIT_FOR_CLOSE_ACK (=>PKT_CLOSE_COMPLETE)
> PKT_ERROR -> CLOSE_WAIT_OURCOMMIT
> BITCOIN_ANCHOR_THEIRSPEND -> CLOSE_WAIT_SPENDTHEM (=>PKT_ERROR)
> BITCOIN_ANCHOR_OTHERSPEND -> CLOSE_WAIT_STEAL (=>PKT_ERROR)
> WAIT_FOR_HTLC_ACCEPT_HIGHPRIO:
> PKT_UPDATE_ACCEPT -> WAIT_FOR_UPDATE_COMPLETE_HIGHPRIO
> (=>PKT_UPDATE_SIGNATURE)
> PKT_UPDATE_DECLINE_HTLC -> NORMAL_LOWPRIO
> PKT_CLOSE -> WAIT_FOR_CLOSE_ACK (=>PKT_CLOSE_COMPLETE)
> PKT_ERROR -> CLOSE_WAIT_OURCOMMIT
> BITCOIN_ANCHOR_THEIRSPEND -> CLOSE_WAIT_SPENDTHEM (=>PKT_ERROR)
> BITCOIN_ANCHOR_OTHERSPEND -> CLOSE_WAIT_STEAL (=>PKT_ERROR)
>
> WAIT_FOR_UPDATE_ACCEPT_LOWPRIO:
> WAIT_FOR_UPDATE_ACCEPT_HIGHPRIO:
> PKT_UPDATE -> WAIT_FOR_UPDATE_SIG_LOWPRIO (=>PKT_UPDATE_ACCEPT)
> PKT_UPDATE_ADD_HTLC -> NORMAL_HIGHPRIO (=>PKT_UPDATE_DECLINE_HTLC)
> PKT_UPDATE_ADD_HTLC -> WAIT_FOR_UPDATE_SIG_LOWPRIO
> (=>PKT_UPDATE_ACCEPT)
> PKT_UPDATE_ACCEPT -> WAIT_FOR_UPDATE_COMPLETE_LOWPRIO
> (=>PKT_UPDATE_SIGNATURE)
> PKT_UPDATE_COMPLETE_HTLC -> WAIT_FOR_UPDATE_SIG_LOWPRIO
> (=>PKT_UPDATE_ACCEPT)
> PKT_UPDATE_TIMEDOUT_HTLC -> WAIT_FOR_UPDATE_SIG_LOWPRIO
> (=>PKT_UPDATE_ACCEPT)
> PKT_UPDATE_ROUTEFAIL_HTLC -> WAIT_FOR_UPDATE_SIG_LOWPRIO
> (=>PKT_UPDATE_ACCEPT)
> PKT_CLOSE -> WAIT_FOR_CLOSE_ACK (=>PKT_CLOSE_COMPLETE)
> PKT_ERROR -> CLOSE_WAIT_OURCOMMIT
> BITCOIN_ANCHOR_THEIRSPEND -> CLOSE_WAIT_SPENDTHEM (=>PKT_ERROR)
> BITCOIN_ANCHOR_OTHERSPEND -> CLOSE_WAIT_STEAL (=>PKT_ERROR)
>
> WAIT_FOR_UPDATE_COMPLETE_LOWPRIO:
> WAIT_FOR_UPDATE_COMPLETE_HIGHPRIO:
> PKT_UPDATE_COMPLETE -> NORMAL_HIGHPRIO
> PKT_CLOSE -> WAIT_FOR_CLOSE_ACK (=>PKT_CLOSE_COMPLETE)
> PKT_ERROR -> CLOSE_WAIT_OURCOMMIT
> BITCOIN_ANCHOR_THEIRSPEND -> CLOSE_WAIT_SPENDTHEM (=>PKT_ERROR)
> BITCOIN_ANCHOR_OTHERSPEND -> CLOSE_WAIT_STEAL (=>PKT_ERROR)
>
> WAIT_FOR_UPDATE_SIG_LOWPRIO:
> PKT_UPDATE_SIGNATURE -> NORMAL_HIGHPRIO (=>PKT_UPDATE_COMPLETE)
> ...
> WAIT_FOR_UPDATE_SIG_HIGHPRIO:
> PKT_UPDATE_SIGNATURE -> NORMAL_LOWPRIO (=>PKT_UPDATE_COMPLETE)
> PKT_ERROR -> CLOSE_WAIT_OURCOMMIT
> BITCOIN_ANCHOR_THEIRSPEND -> CLOSE_WAIT_SPENDTHEM (=>PKT_ERROR)
> BITCOIN_ANCHOR_OTHERSPEND -> CLOSE_WAIT_STEAL (=>PKT_ERROR)
> CMD_CLOSE -> WAIT_FOR_CLOSE_COMPLETE (=>PKT_CLOSE)
>
> Normal closing:
> ==============
>
> WAIT_FOR_CLOSE_COMPLETE:
> PKT_CLOSE -> CLOSE_WAIT_CLOSE (=>PKT_CLOSE_ACK)
> PKT_CLOSE_COMPLETE -> CLOSE_WAIT_CLOSE (=>PKT_CLOSE_ACK)
> BITCOIN_ANCHOR_THEIRSPEND -> CLOSE_WAIT_SPENDTHEM_CLOSE
> BITCOIN_ANCHOR_OTHERSPEND -> CLOSE_WAIT_STEAL_CLOSE
> BITCOIN_CLOSE_DONE -> CLOSED
> INPUT_CLOSE_COMPLETE_TIMEOUT -> CLOSE_WAIT_CLOSE_OURCOMMIT
> (=>PKT_ERROR)
> WAIT_FOR_CLOSE_ACK:
> PKT_CLOSE_ACK -> CLOSE_WAIT_CLOSE
> PKT_ERROR -> CLOSE_WAIT_CLOSE
> BITCOIN_ANCHOR_THEIRSPEND -> CLOSE_WAIT_SPENDTHEM_CLOSE
> BITCOIN_ANCHOR_OTHERSPEND -> CLOSE_WAIT_STEAL_CLOSE
> BITCOIN_CLOSE_DONE -> CLOSED
> CLOSE_WAIT_CLOSE:
> BITCOIN_ANCHOR_THEIRSPEND -> CLOSE_WAIT_SPENDTHEM_CLOSE
> BITCOIN_ANCHOR_OTHERSPEND -> CLOSE_WAIT_STEAL_CLOSE
> BITCOIN_CLOSE_DONE -> CLOSED
>
> Weird close states
> ==================
> Eg. steal transction, unilateral close, combinations thereof:
>
> CLOSE_WAIT_STEAL:
> BITCOIN_ANCHOR_THEIRSPEND -> CLOSE_WAIT_STEAL_SPENDTHEM
> BITCOIN_STEAL_DONE -> CLOSED
> CLOSE_WAIT_SPENDTHEM:
> BITCOIN_ANCHOR_OTHERSPEND -> CLOSE_WAIT_STEAL_SPENDTHEM
> BITCOIN_SPEND_THEIRS_DONE -> CLOSED
> CLOSE_WAIT_STEAL_SPENDTHEM:
> BITCOIN_SPEND_THEIRS_DONE -> CLOSED
> BITCOIN_STEAL_DONE -> CLOSED
> CLOSE_WAIT_STEAL_CLOSE:
> BITCOIN_ANCHOR_THEIRSPEND -> CLOSE_WAIT_STEAL_SPENDTHEM_CLOSE
> BITCOIN_STEAL_DONE -> CLOSED
> BITCOIN_CLOSE_DONE -> CLOSED
> CLOSE_WAIT_SPENDTHEM_CLOSE:
> BITCOIN_ANCHOR_OTHERSPEND -> CLOSE_WAIT_STEAL_SPENDTHEM_CLOSE
> BITCOIN_SPEND_THEIRS_DONE -> CLOSED
> BITCOIN_CLOSE_DONE -> CLOSED
> CLOSE_WAIT_STEAL_SPENDTHEM_CLOSE:
> BITCOIN_SPEND_THEIRS_DONE -> CLOSED
> BITCOIN_STEAL_DONE -> CLOSED
> BITCOIN_CLOSE_DONE -> CLOSED
> CLOSE_WAIT_OURCOMMIT:
> BITCOIN_ANCHOR_OURCOMMIT_DELAYPASSED -> CLOSE_WAIT_SPENDOURS
> BITCOIN_ANCHOR_THEIRSPEND -> CLOSE_WAIT_SPENDTHEM_OURCOMMIT
> BITCOIN_ANCHOR_OTHERSPEND -> CLOSE_WAIT_STEAL_OURCOMMIT
> CLOSE_WAIT_STEAL_OURCOMMIT:
> BITCOIN_ANCHOR_OURCOMMIT_DELAYPASSED -> CLOSE_WAIT_STEAL_SPENDOURS
> BITCOIN_ANCHOR_THEIRSPEND -> CLOSE_WAIT_STEAL_SPENDTHEM_OURCOMMIT
> BITCOIN_STEAL_DONE -> CLOSED
> CLOSE_WAIT_SPENDTHEM_OURCOMMIT:
> BITCOIN_ANCHOR_OURCOMMIT_DELAYPASSED ->
> CLOSE_WAIT_SPENDTHEM_SPENDOURS
> BITCOIN_ANCHOR_OTHERSPEND -> CLOSE_WAIT_STEAL_SPENDTHEM_OURCOMMIT
> BITCOIN_SPEND_THEIRS_DONE -> CLOSED
> CLOSE_WAIT_STEAL_SPENDTHEM_OURCOMMIT:
> BITCOIN_ANCHOR_OURCOMMIT_DELAYPASSED ->
> CLOSE_WAIT_STEAL_SPENDTHEM_SPENDOURS
> BITCOIN_SPEND_THEIRS_DONE -> CLOSED
> BITCOIN_STEAL_DONE -> CLOSED
> CLOSE_WAIT_CLOSE_OURCOMMIT:
> BITCOIN_ANCHOR_OURCOMMIT_DELAYPASSED -> CLOSE_WAIT_CLOSE_SPENDOURS
> BITCOIN_ANCHOR_THEIRSPEND -> CLOSE_WAIT_SPENDTHEM_CLOSE_OURCOMMIT
> BITCOIN_ANCHOR_OTHERSPEND -> CLOSE_WAIT_STEAL_CLOSE_OURCOMMIT
> BITCOIN_CLOSE_DONE -> CLOSED
> CLOSE_WAIT_STEAL_CLOSE_OURCOMMIT:
> BITCOIN_ANCHOR_OURCOMMIT_DELAYPASSED ->
> CLOSE_WAIT_STEAL_CLOSE_SPENDOURS
> BITCOIN_ANCHOR_THEIRSPEND ->
> CLOSE_WAIT_STEAL_SPENDTHEM_CLOSE_OURCOMMIT
> BITCOIN_STEAL_DONE -> CLOSED
> BITCOIN_CLOSE_DONE -> CLOSED
> CLOSE_WAIT_SPENDTHEM_CLOSE_OURCOMMIT:
> BITCOIN_ANCHOR_OURCOMMIT_DELAYPASSED ->
> CLOSE_WAIT_SPENDTHEM_CLOSE_SPENDOURS
> BITCOIN_ANCHOR_OTHERSPEND ->
> CLOSE_WAIT_STEAL_SPENDTHEM_CLOSE_OURCOMMIT
> BITCOIN_SPEND_THEIRS_DONE -> CLOSED
> BITCOIN_CLOSE_DONE -> CLOSED
> CLOSE_WAIT_STEAL_SPENDTHEM_CLOSE_OURCOMMIT:
> BITCOIN_ANCHOR_OURCOMMIT_DELAYPASSED ->
> CLOSE_WAIT_STEAL_SPENDTHEM_CLOSE_SPENDOURS
> BITCOIN_SPEND_THEIRS_DONE -> CLOSED
> BITCOIN_STEAL_DONE -> CLOSED
> BITCOIN_CLOSE_DONE -> CLOSED
> CLOSE_WAIT_SPENDOURS:
> BITCOIN_ANCHOR_THEIRSPEND -> CLOSE_WAIT_SPENDTHEM_SPENDOURS
> BITCOIN_ANCHOR_OTHERSPEND -> CLOSE_WAIT_STEAL_SPENDOURS
> BITCOIN_SPEND_OURS_DONE -> CLOSED
> CLOSE_WAIT_STEAL_SPENDOURS:
> BITCOIN_ANCHOR_THEIRSPEND -> CLOSE_WAIT_STEAL_SPENDTHEM_SPENDOURS
> BITCOIN_SPEND_OURS_DONE -> CLOSED
> BITCOIN_STEAL_DONE -> CLOSED
> CLOSE_WAIT_SPENDTHEM_SPENDOURS:
> BITCOIN_ANCHOR_OTHERSPEND -> CLOSE_WAIT_STEAL_SPENDTHEM_SPENDOURS
> BITCOIN_SPEND_THEIRS_DONE -> CLOSED
> BITCOIN_SPEND_OURS_DONE -> CLOSED
> CLOSE_WAIT_STEAL_SPENDTHEM_SPENDOURS:
> BITCOIN_SPEND_THEIRS_DONE -> CLOSED
> BITCOIN_SPEND_OURS_DONE -> CLOSED
> BITCOIN_STEAL_DONE -> CLOSED
> CLOSE_WAIT_CLOSE_SPENDOURS:
> BITCOIN_ANCHOR_THEIRSPEND -> CLOSE_WAIT_SPENDTHEM_CLOSE_SPENDOURS
> BITCOIN_ANCHOR_OTHERSPEND -> CLOSE_WAIT_STEAL_CLOSE_SPENDOURS
> BITCOIN_SPEND_OURS_DONE -> CLOSED
> BITCOIN_CLOSE_DONE -> CLOSED
> CLOSE_WAIT_STEAL_CLOSE_SPENDOURS:
> BITCOIN_ANCHOR_THEIRSPEND ->
> CLOSE_WAIT_STEAL_SPENDTHEM_CLOSE_SPENDOURS
> BITCOIN_SPEND_OURS_DONE -> CLOSED
> BITCOIN_STEAL_DONE -> CLOSED
> BITCOIN_CLOSE_DONE -> CLOSED
> CLOSE_WAIT_SPENDTHEM_CLOSE_SPENDOURS:
> BITCOIN_ANCHOR_OTHERSPEND ->
> CLOSE_WAIT_STEAL_SPENDTHEM_CLOSE_SPENDOURS
> BITCOIN_SPEND_THEIRS_DONE -> CLOSED
> BITCOIN_SPEND_OURS_DONE -> CLOSED
> BITCOIN_CLOSE_DONE -> CLOSED
> CLOSE_WAIT_STEAL_SPENDTHEM_CLOSE_SPENDOURS:
> BITCOIN_SPEND_THEIRS_DONE -> CLOSED
> BITCOIN_SPEND_OURS_DONE -> CLOSED
> BITCOIN_STEAL_DONE -> CLOSED
> BITCOIN_CLOSE_DONE -> CLOSED
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.linuxfoundation.org/pipermail/lightning-dev/attachments/20150828/6e9bd480/attachment-0001.html>;
Author Public Key
npub1yz88535e0ydqye9q9x8l5cz9d3g6ervfjgyk5xm88zvktmxvstlsuy4pdt