@nam088/zca-js 1.0.1 → 3.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.releaserc.json +35 -0
- package/CHANGELOG.md +6 -0
- package/CODE_OF_CONDUCT.md +37 -36
- package/CONTRIBUTING.md +162 -154
- package/README.md +22 -22
- package/SECURITY.md +25 -20
- package/dist/index.cjs +3424 -3275
- package/dist/index.d.cts +1292 -1292
- package/dist/index.d.ts +1292 -1292
- package/dist/index.js +3244 -3108
- package/{eslint.config.mjs → eslint.config.js} +0 -6
- package/package.json +76 -80
- package/tsup.config.ts +11 -43
- package/dist/index.cjs.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/index.min.cjs +0 -5
- package/dist/index.min.cjs.map +0 -1
- package/dist/index.min.js +0 -5
- package/dist/index.min.js.map +0 -1
- package/index.d.ts +0 -2
- package/qr.png +0 -0
package/dist/index.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/Errors/ZaloApiError.ts","../src/Errors/ZaloApiMissingImageMetadataGetter.ts","../src/Errors/ZaloApiLoginQRAborted.ts","../src/Errors/ZaloApiLoginQRDeclined.ts","../src/models/AutoReply.ts","../src/models/Board.ts","../src/models/Enum.ts","../src/models/DeliveredMessage.ts","../src/models/FriendEvent.ts","../src/models/Group.ts","../src/models/GroupEvent.ts","../src/models/Message.ts","../src/models/Reaction.ts","../src/models/Reminder.ts","../src/models/SeenMessage.ts","../src/models/Typing.ts","../src/models/Undo.ts","../src/models/ZBusiness.ts","../src/context.ts","../src/utils.ts","../src/apis/loginQR.ts","../src/apis/login.ts","../src/update.ts","../src/apis/listen.ts","../src/apis/acceptFriendRequest.ts","../src/apis/addGroupBlockedMember.ts","../src/apis/addGroupDeputy.ts","../src/apis/addPollOptions.ts","../src/apis/addQuickMessage.ts","../src/apis/addReaction.ts","../src/apis/addUnreadMark.ts","../src/apis/addUserToGroup.ts","../src/apis/blockUser.ts","../src/apis/blockViewFeed.ts","../src/apis/changeAccountAvatar.ts","../src/apis/changeFriendAlias.ts","../src/apis/changeGroupAvatar.ts","../src/apis/changeGroupName.ts","../src/apis/changeGroupOwner.ts","../src/apis/createAutoReply.ts","../src/apis/createCatalog.ts","../src/apis/createGroup.ts","../src/apis/createNote.ts","../src/apis/createPoll.ts","../src/apis/createProductCatalog.ts","../src/apis/createReminder.ts","../src/apis/deleteAutoReply.ts","../src/apis/deleteAvatar.ts","../src/apis/deleteCatalog.ts","../src/apis/deleteChat.ts","../src/apis/deleteGroupInviteBox.ts","../src/apis/deleteMessage.ts","../src/apis/deleteProductCatalog.ts","../src/apis/disableGroupLink.ts","../src/apis/disperseGroup.ts","../src/apis/editNote.ts","../src/apis/editReminder.ts","../src/apis/enableGroupLink.ts","../src/apis/fetchAccountInfo.ts","../src/apis/findUser.ts","../src/apis/forwardMessage.ts","../src/apis/getAliasList.ts","../src/apis/getAllFriends.ts","../src/apis/getAllGroups.ts","../src/apis/getArchivedChatList.ts","../src/apis/getAutoDeleteChat.ts","../src/apis/getAutoReplyList.ts","../src/apis/getAvatarList.ts","../src/apis/getBizAccount.ts","../src/apis/getCatalogList.ts","../src/apis/getContext.ts","../src/apis/getCookie.ts","../src/apis/getFriendBoardList.ts","../src/apis/getFriendOnlines.ts","../src/apis/getFriendRecommendations.ts","../src/apis/getFriendRequestStatus.ts","../src/apis/getGroupBlockedMember.ts","../src/apis/getGroupInfo.ts","../src/apis/getGroupInviteBoxInfo.ts","../src/apis/getGroupInviteBoxList.ts","../src/apis/getGroupLinkDetail.ts","../src/apis/getGroupLinkInfo.ts","../src/apis/getGroupMembersInfo.ts","../src/apis/getHiddenConversations.ts","../src/apis/getLabels.ts","../src/apis/getListBoard.ts","../src/apis/getListReminder.ts","../src/apis/getMute.ts","../src/apis/getOwnId.ts","../src/apis/getPendingGroupMembers.ts","../src/apis/getPinConversations.ts","../src/apis/getPollDetail.ts","../src/apis/getProductCatalogList.ts","../src/apis/getQR.ts","../src/apis/getQuickMessageList.ts","../src/apis/getRelatedFriendGroup.ts","../src/apis/getReminder.ts","../src/apis/getReminderResponses.ts","../src/apis/getSentFriendRequest.ts","../src/apis/getSettings.ts","../src/apis/getStickers.ts","../src/apis/getStickersDetail.ts","../src/apis/getUnreadMark.ts","../src/apis/getUserInfo.ts","../src/apis/inviteUserToGroups.ts","../src/apis/joinGroupInviteBox.ts","../src/apis/joinGroupLink.ts","../src/apis/keepAlive.ts","../src/apis/lastOnline.ts","../src/apis/leaveGroup.ts","../src/apis/lockPoll.ts","../src/apis/parseLink.ts","../src/apis/rejectFriendRequest.ts","../src/apis/removeFriend.ts","../src/apis/removeFriendAlias.ts","../src/apis/removeGroupBlockedMember.ts","../src/apis/removeGroupDeputy.ts","../src/apis/removeQuickMessage.ts","../src/apis/removeReminder.ts","../src/apis/removeUnreadMark.ts","../src/apis/removeUserFromGroup.ts","../src/apis/resetHiddenConversPin.ts","../src/apis/reuseAvatar.ts","../src/apis/reviewPendingMemberRequest.ts","../src/apis/sendBankCard.ts","../src/apis/sendCard.ts","../src/apis/sendDeliveredEvent.ts","../src/apis/sendFriendRequest.ts","../src/apis/sendLink.ts","../src/apis/sendMessage.ts","../src/apis/sendReport.ts","../src/apis/sendSeenEvent.ts","../src/apis/sendSticker.ts","../src/apis/sendTypingEvent.ts","../src/apis/sendVideo.ts","../src/apis/sendVoice.ts","../src/apis/setHiddenConversations.ts","../src/apis/setMute.ts","../src/apis/setPinnedConversations.ts","../src/apis/sharePoll.ts","../src/apis/unblockUser.ts","../src/apis/undo.ts","../src/apis/undoFriendRequest.ts","../src/apis/updateActiveStatus.ts","../src/apis/updateAutoDeleteChat.ts","../src/apis/updateAutoReply.ts","../src/apis/updateCatalog.ts","../src/apis/updateGroupSettings.ts","../src/apis/updateHiddenConversPin.ts","../src/apis/updateLabels.ts","../src/apis/updateLang.ts","../src/apis/updateProductCatalog.ts","../src/apis/updateProfile.ts","../src/apis/updateQuickMessage.ts","../src/apis/updateSettings.ts","../src/apis/uploadAttachment.ts","../src/apis/uploadProductPhoto.ts","../src/apis/votePoll.ts","../src/apis/custom.ts","../src/apis.ts","../src/zalo.ts"],"names":["AutoReplyScope","BoardType","ThreadType","DestType","Gender","BinBankCard","FriendEventType","GroupTopicType","GroupType","GroupEventType","Reactions","ReminderRepeatMode","BusinessCategory","e","t","n","LoginQRCallbackEventType","retry","abort","assign","CloseReason","data","castArray","fs","FormData","_a","params","getUserInfo","ReviewPendingMemberRequestStatus","TextStyle","Urgency","isFilePath","ReportReason","MuteDuration","MuteAction","ChatTTL","UpdateLangAvailableLanguages","UpdateSettingsType","toughCookie"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAO,IAAM,YAAA,GAAN,cAA2B,KAAA,CAAM;AAAA,EAGpC,WAAA,CAAY,SAAiB,IAAA,EAAe;AACxC,IAAA,KAAA,CAAM,OAAO,CAAA;AAEb,IAAA,IAAA,CAAK,IAAA,GAAO,aAAA;AACZ,IAAA,IAAA,CAAK,OAAO,IAAA,IAAQ,IAAA;AAAA,EACxB;AACJ;;;ACPO,IAAM,iCAAA,GAAN,cAAgD,YAAA,CAAa;AAAA,EAChE,WAAA,GAAc;AACV,IAAA,KAAA,CAAM,8EAA8E,CAAA;AACpF,IAAA,IAAA,CAAK,IAAA,GAAO,mCAAA;AAAA,EAChB;AACJ;;;ACLO,IAAM,qBAAA,GAAN,cAAoC,YAAA,CAAa;AAAA,EACpD,WAAA,CAAY,UAAkB,mBAAA,EAAqB;AAC/C,IAAA,KAAA,CAAM,OAAO,CAAA;AACb,IAAA,IAAA,CAAK,IAAA,GAAO,uBAAA;AAAA,EAChB;AACJ;;;ACLO,IAAM,sBAAA,GAAN,cAAqC,YAAA,CAAa;AAAA,EACrD,WAAA,CAAY,UAAkB,2BAAA,EAA6B;AACvD,IAAA,KAAA,CAAM,OAAO,CAAA;AACb,IAAA,IAAA,CAAK,IAAA,GAAO,wBAAA;AAAA,EAChB;AACJ;;;ACQO,IAAK,cAAA,qBAAAA,eAAAA,KAAL;AACH,EAAAA,eAAAA,CAAAA,eAAAA,CAAA,cAAW,CAAA,CAAA,GAAX,UAAA;AACA,EAAAA,eAAAA,CAAAA,eAAAA,CAAA,cAAW,CAAA,CAAA,GAAX,UAAA;AACA,EAAAA,eAAAA,CAAAA,eAAAA,CAAA,qBAAkB,CAAA,CAAA,GAAlB,iBAAA;AACA,EAAAA,eAAAA,CAAAA,eAAAA,CAAA,mBAAgB,CAAA,CAAA,GAAhB,eAAA;AAJQ,EAAA,OAAAA,eAAAA;AAAA,CAAA,EAAA,cAAA,IAAA,EAAA;;;ACfL,IAAK,SAAA,qBAAAC,UAAAA,KAAL;AACH,EAAAA,UAAAA,CAAAA,UAAAA,CAAA,UAAO,CAAA,CAAA,GAAP,MAAA;AACA,EAAAA,UAAAA,CAAAA,UAAAA,CAAA,mBAAgB,CAAA,CAAA,GAAhB,eAAA;AACA,EAAAA,UAAAA,CAAAA,UAAAA,CAAA,UAAO,CAAA,CAAA,GAAP,MAAA;AAHQ,EAAA,OAAAA,UAAAA;AAAA,CAAA,EAAA,SAAA,IAAA,EAAA;;;ACAL,IAAK,UAAA,qBAAAC,WAAAA,KAAL;AACH,EAAAA,WAAAA,CAAAA,WAAAA,CAAA,MAAA,CAAA,GAAA,CAAA,CAAA,GAAA,MAAA;AACA,EAAAA,WAAAA,CAAAA,WAAAA,CAAA,OAAA,CAAA,GAAA,CAAA,CAAA,GAAA,OAAA;AAFQ,EAAA,OAAAA,WAAAA;AAAA,CAAA,EAAA,UAAA,IAAA,EAAA;AAKL,IAAK,QAAA,qBAAAC,SAAAA,KAAL;AACH,EAAAA,SAAAA,CAAAA,SAAAA,CAAA,WAAQ,CAAA,CAAA,GAAR,OAAA;AACA,EAAAA,SAAAA,CAAAA,SAAAA,CAAA,UAAO,CAAA,CAAA,GAAP,MAAA;AACA,EAAAA,SAAAA,CAAAA,SAAAA,CAAA,UAAO,CAAA,CAAA,GAAP,MAAA;AAHQ,EAAA,OAAAA,SAAAA;AAAA,CAAA,EAAA,QAAA,IAAA,EAAA;AAML,IAAK,MAAA,qBAAAC,OAAAA,KAAL;AACH,EAAAA,OAAAA,CAAAA,OAAAA,CAAA,UAAO,CAAA,CAAA,GAAP,MAAA;AACA,EAAAA,OAAAA,CAAAA,OAAAA,CAAA,YAAS,CAAA,CAAA,GAAT,QAAA;AAFQ,EAAA,OAAAA,OAAAA;AAAA,CAAA,EAAA,MAAA,IAAA,EAAA;AASL,IAAK,WAAA,qBAAAC,YAAAA,KAAL;AAIH,EAAAA,YAAAA,CAAAA,YAAAA,CAAA,YAAS,MAAA,CAAA,GAAT,QAAA;AAIA,EAAAA,YAAAA,CAAAA,YAAAA,CAAA,SAAM,MAAA,CAAA,GAAN,KAAA;AAIA,EAAAA,YAAAA,CAAAA,YAAAA,CAAA,cAAW,MAAA,CAAA,GAAX,UAAA;AAIA,EAAAA,YAAAA,CAAAA,YAAAA,CAAA,UAAO,MAAA,CAAA,GAAP,MAAA;AAIA,EAAAA,YAAAA,CAAAA,YAAAA,CAAA,YAAS,MAAA,CAAA,GAAT,QAAA;AAIA,EAAAA,YAAAA,CAAAA,YAAAA,CAAA,eAAY,MAAA,CAAA,GAAZ,WAAA;AAIA,EAAAA,YAAAA,CAAAA,YAAAA,CAAA,kBAAe,MAAA,CAAA,GAAf,cAAA;AAIA,EAAAA,YAAAA,CAAAA,YAAAA,CAAA,UAAO,MAAA,CAAA,GAAP,MAAA;AAIA,EAAAA,YAAAA,CAAAA,YAAAA,CAAA,aAAU,MAAA,CAAA,GAAV,SAAA;AAIA,EAAAA,YAAAA,CAAAA,YAAAA,CAAA,eAAY,MAAA,CAAA,GAAZ,WAAA;AAIA,EAAAA,YAAAA,CAAAA,YAAAA,CAAA,eAAY,MAAA,CAAA,GAAZ,WAAA;AAIA,EAAAA,YAAAA,CAAAA,YAAAA,CAAA,cAAW,MAAA,CAAA,GAAX,UAAA;AAIA,EAAAA,YAAAA,CAAAA,YAAAA,CAAA,gBAAa,MAAA,CAAA,GAAb,YAAA;AAIA,EAAAA,YAAAA,CAAAA,YAAAA,CAAA,cAAW,MAAA,CAAA,GAAX,UAAA;AAIA,EAAAA,YAAAA,CAAAA,YAAAA,CAAA,YAAS,MAAA,CAAA,GAAT,QAAA;AAIA,EAAAA,YAAAA,CAAAA,YAAAA,CAAA,YAAS,MAAA,CAAA,GAAT,QAAA;AAIA,EAAAA,YAAAA,CAAAA,YAAAA,CAAA,UAAO,MAAA,CAAA,GAAP,MAAA;AAIA,EAAAA,YAAAA,CAAAA,YAAAA,CAAA,oBAAiB,MAAA,CAAA,GAAjB,gBAAA;AAIA,EAAAA,YAAAA,CAAAA,YAAAA,CAAA,aAAU,MAAA,CAAA,GAAV,SAAA;AAIA,EAAAA,YAAAA,CAAAA,YAAAA,CAAA,YAAS,MAAA,CAAA,GAAT,QAAA;AAIA,EAAAA,YAAAA,CAAAA,YAAAA,CAAA,mBAAgB,MAAA,CAAA,GAAhB,eAAA;AAIA,EAAAA,YAAAA,CAAAA,YAAAA,CAAA,WAAQ,MAAA,CAAA,GAAR,OAAA;AAIA,EAAAA,YAAAA,CAAAA,YAAAA,CAAA,kBAAe,MAAA,CAAA,GAAf,cAAA;AAIA,EAAAA,YAAAA,CAAAA,YAAAA,CAAA,sBAAmB,MAAA,CAAA,GAAnB,kBAAA;AAIA,EAAAA,YAAAA,CAAAA,YAAAA,CAAA,qBAAkB,MAAA,CAAA,GAAlB,iBAAA;AAIA,EAAAA,YAAAA,CAAAA,YAAAA,CAAA,YAAS,MAAA,CAAA,GAAT,QAAA;AAIA,EAAAA,YAAAA,CAAAA,YAAAA,CAAA,aAAU,MAAA,CAAA,GAAV,SAAA;AAIA,EAAAA,YAAAA,CAAAA,YAAAA,CAAA,SAAM,MAAA,CAAA,GAAN,KAAA;AAIA,EAAAA,YAAAA,CAAAA,YAAAA,CAAA,SAAM,MAAA,CAAA,GAAN,KAAA;AAIA,EAAAA,YAAAA,CAAAA,YAAAA,CAAA,gBAAa,MAAA,CAAA,GAAb,YAAA;AAIA,EAAAA,YAAAA,CAAAA,YAAAA,CAAA,mBAAgB,MAAA,CAAA,GAAhB,eAAA;AAIA,EAAAA,YAAAA,CAAAA,YAAAA,CAAA,SAAM,MAAA,CAAA,GAAN,KAAA;AAIA,EAAAA,YAAAA,CAAAA,YAAAA,CAAA,gBAAa,MAAA,CAAA,GAAb,YAAA;AAIA,EAAAA,YAAAA,CAAAA,YAAAA,CAAA,YAAS,MAAA,CAAA,GAAT,QAAA;AAIA,EAAAA,YAAAA,CAAAA,YAAAA,CAAA,eAAY,MAAA,CAAA,GAAZ,WAAA;AAIA,EAAAA,YAAAA,CAAAA,YAAAA,CAAA,yBAAsB,MAAA,CAAA,GAAtB,qBAAA;AAIA,EAAAA,YAAAA,CAAAA,YAAAA,CAAA,SAAM,MAAA,CAAA,GAAN,KAAA;AAIA,EAAAA,YAAAA,CAAAA,YAAAA,CAAA,SAAM,MAAA,CAAA,GAAN,KAAA;AAIA,EAAAA,YAAAA,CAAAA,YAAAA,CAAA,eAAY,MAAA,CAAA,GAAZ,WAAA;AAIA,EAAAA,YAAAA,CAAAA,YAAAA,CAAA,iBAAc,MAAA,CAAA,GAAd,aAAA;AAIA,EAAAA,YAAAA,CAAAA,YAAAA,CAAA,aAAU,MAAA,CAAA,GAAV,SAAA;AAIA,EAAAA,YAAAA,CAAAA,YAAAA,CAAA,kBAAe,MAAA,CAAA,GAAf,cAAA;AAIA,EAAAA,YAAAA,CAAAA,YAAAA,CAAA,gCAA6B,MAAA,CAAA,GAA7B,4BAAA;AAIA,EAAAA,YAAAA,CAAAA,YAAAA,CAAA,UAAO,OAAA,CAAA,GAAP,MAAA;AAIA,EAAAA,YAAAA,CAAAA,YAAAA,CAAA,YAAS,MAAA,CAAA,GAAT,QAAA;AAIA,EAAAA,YAAAA,CAAAA,YAAAA,CAAA,iBAAc,MAAA,CAAA,GAAd,aAAA;AAIA,EAAAA,YAAAA,CAAAA,YAAAA,CAAA,UAAO,MAAA,CAAA,GAAP,MAAA;AAIA,EAAAA,YAAAA,CAAAA,YAAAA,CAAA,WAAQ,MAAA,CAAA,GAAR,OAAA;AAIA,EAAAA,YAAAA,CAAAA,YAAAA,CAAA,kCAA+B,MAAA,CAAA,GAA/B,8BAAA;AAIA,EAAAA,YAAAA,CAAAA,YAAAA,CAAA,SAAM,MAAA,CAAA,GAAN,KAAA;AAIA,EAAAA,YAAAA,CAAAA,YAAAA,CAAA,YAAS,MAAA,CAAA,GAAT,QAAA;AAIA,EAAAA,YAAAA,CAAAA,YAAAA,CAAA,SAAM,MAAA,CAAA,GAAN,KAAA;AAIA,EAAAA,YAAAA,CAAAA,YAAAA,CAAA,eAAY,MAAA,CAAA,GAAZ,WAAA;AAIA,EAAAA,YAAAA,CAAAA,YAAAA,CAAA,cAAW,MAAA,CAAA,GAAX,UAAA;AAIA,EAAAA,YAAAA,CAAAA,YAAAA,CAAA,iBAAc,MAAA,CAAA,GAAd,aAAA;AAIA,EAAAA,YAAAA,CAAAA,YAAAA,CAAA,gBAAa,MAAA,CAAA,GAAb,YAAA;AAIA,EAAAA,YAAAA,CAAAA,YAAAA,CAAA,gBAAa,MAAA,CAAA,GAAb,YAAA;AApOQ,EAAA,OAAAA,YAAAA;AAAA,CAAA,EAAA,WAAA,IAAA,EAAA;;;ACLL,IAAM,uBAAN,MAA2B;AAAA,EAO9B,YAAY,IAAA,EAAyB;AANrC,IAAA,IAAA,CAAA,IAAA,GAAA,CAAA;AAOI,IAAA,IAAA,CAAK,IAAA,GAAO,IAAA;AACZ,IAAA,IAAA,CAAK,QAAA,GAAW,IAAA,CAAK,aAAA,CAAc,CAAC,CAAA;AACpC,IAAA,IAAA,CAAK,MAAA,GAAS,KAAA;AAAA,EAClB;AACJ;AAEO,IAAM,wBAAN,MAA4B;AAAA,EAO/B,WAAA,CAAY,KAAa,IAAA,EAA8B;AANvD,IAAA,IAAA,CAAA,IAAA,GAAA,CAAA;AAOI,IAAA,IAAA,CAAK,IAAA,GAAO,IAAA;AACZ,IAAA,IAAA,CAAK,WAAW,IAAA,CAAK,OAAA;AACrB,IAAA,IAAA,CAAK,MAAA,GAAS,IAAA,CAAK,aAAA,CAAc,QAAA,CAAS,GAAG,CAAA;AAAA,EACjD;AACJ;;;ACzCO,IAAK,eAAA,qBAAAC,gBAAAA,KAAL;AACH,EAAAA,gBAAAA,CAAAA,gBAAAA,CAAA,KAAA,CAAA,GAAA,CAAA,CAAA,GAAA,KAAA;AACA,EAAAA,gBAAAA,CAAAA,gBAAAA,CAAA,QAAA,CAAA,GAAA,CAAA,CAAA,GAAA,QAAA;AAEA,EAAAA,gBAAAA,CAAAA,gBAAAA,CAAA,SAAA,CAAA,GAAA,CAAA,CAAA,GAAA,SAAA;AACA,EAAAA,gBAAAA,CAAAA,gBAAAA,CAAA,cAAA,CAAA,GAAA,CAAA,CAAA,GAAA,cAAA;AACA,EAAAA,gBAAAA,CAAAA,gBAAAA,CAAA,gBAAA,CAAA,GAAA,CAAA,CAAA,GAAA,gBAAA;AAEA,EAAAA,gBAAAA,CAAAA,gBAAAA,CAAA,qBAAA,CAAA,GAAA,CAAA,CAAA,GAAA,qBAAA;AAEA,EAAAA,gBAAAA,CAAAA,gBAAAA,CAAA,OAAA,CAAA,GAAA,CAAA,CAAA,GAAA,OAAA;AACA,EAAAA,gBAAAA,CAAAA,gBAAAA,CAAA,SAAA,CAAA,GAAA,CAAA,CAAA,GAAA,SAAA;AACA,EAAAA,gBAAAA,CAAAA,gBAAAA,CAAA,YAAA,CAAA,GAAA,CAAA,CAAA,GAAA,YAAA;AACA,EAAAA,gBAAAA,CAAAA,gBAAAA,CAAA,cAAA,CAAA,GAAA,CAAA,CAAA,GAAA,cAAA;AAEA,EAAAA,gBAAAA,CAAAA,gBAAAA,CAAA,WAAA,CAAA,GAAA,EAAA,CAAA,GAAA,WAAA;AACA,EAAAA,gBAAAA,CAAAA,gBAAAA,CAAA,YAAA,CAAA,GAAA,EAAA,CAAA,GAAA,YAAA;AAEA,EAAAA,gBAAAA,CAAAA,gBAAAA,CAAA,SAAA,CAAA,GAAA,EAAA,CAAA,GAAA,SAAA;AAlBQ,EAAA,OAAAA,gBAAAA;AAAA,CAAA,EAAA,eAAA,IAAA,EAAA;AA8IL,SAAS,qBAAA,CAAsB,GAAA,EAAa,IAAA,EAAoB,IAAA,EAAoC;AACvG,EAAA,IACI,IAAA,IAAQ,CAAA,cACR,IAAA,IAAQ,CAAA,iBACR,IAAA,IAAQ,CAAA,gBACR,IAAA,IAAQ,CAAA,kBACR,IAAA,IAAQ,CAAA,qBACR,IAAA,IAAQ,CAAA,qBACV;AACE,IAAA,OAAO;AAAA,MACH,IAAA;AAAA,MACA,IAAA;AAAA,MACA,QAAA,EAAU,IAAA;AAAA,MACV,QAAQ,CAAC,CAAC,aAAqB,CAAA,cAAsB,CAAE,SAAS,IAAI;AAAA,KACxE;AAAA,EACJ,CAAA,MAAA,IAAW,IAAA,IAAQ,CAAA,yBAAkC,IAAA,IAAQ,CAAA,qBAA8B;AACvF,IAAA,MAAM,WAAY,IAAA,CAAgC,KAAA;AAClD,IAAA,OAAO;AAAA,MACH,IAAA;AAAA,MACA,IAAA;AAAA,MACA,QAAA;AAAA,MACA,MAAA,EAAS,KAA6B,OAAA,IAAW;AAAA,KACrD;AAAA,EACJ,CAAA,MAAA,IAAW,QAAQ,CAAA,gBAAyB;AACxC,IAAA,MAAM,WAAY,IAAA,CAA6B,KAAA;AAC/C,IAAA,OAAO;AAAA,MACH,IAAA;AAAA,MACA,IAAA;AAAA,MACA,QAAA;AAAA,MACA,MAAA,EAAS,KAA6B,OAAA,IAAW;AAAA,KACrD;AAAA,EACJ,CAAA,MAAA,IAAW,QAAQ,CAAA,4BAAqC;AACpD,IAAA,OAAO;AAAA,MACH,IAAA;AAAA,MACA,IAAA;AAAA,MACA,QAAA,EAAU,GAAA;AAAA,MACV,MAAA,EAAQ;AAAA,KACZ;AAAA,EACJ,CAAA,MAAA,IAAW,QAAQ,EAAA,mBAA4B;AAC3C,IAAA,MAAM,WAAY,IAAA,CAA+B,cAAA;AACjD,IAAA,OAAO;AAAA,MACH,IAAA;AAAA,MACA,IAAA;AAAA,MACA,QAAA;AAAA,MACA,MAAA,EAAS,KAA+B,OAAA,IAAW;AAAA,KACvD;AAAA,EACJ,CAAA,MAAA,IAAW,QAAQ,EAAA,kBAA2B;AAC1C,IAAA,MAAM,WAAY,IAAA,CAA8B,cAAA;AAChD,IAAA,OAAO;AAAA,MACH,IAAA;AAAA,MACA,IAAA;AAAA,MACA,QAAA;AAAA,MACA,MAAA,EAAS,KAA8B,OAAA,IAAW;AAAA,KACtD;AAAA,EACJ,CAAA,MAAO;AACH,IAAA,OAAO;AAAA,MACH,IAAA,EAAM,EAAA;AAAA,MACN,IAAA,EAAM,IAAA,CAAK,SAAA,CAAU,IAAI,CAAA;AAAA,MACzB,QAAA,EAAU,EAAA;AAAA,MACV,MAAA,EAAQ;AAAA,KACZ;AAAA,EACJ;AACJ;;;AC5LO,IAAK,cAAA,qBAAAC,eAAAA,KAAL;AACH,EAAAA,eAAAA,CAAAA,eAAAA,CAAA,UAAO,CAAA,CAAA,GAAP,MAAA;AACA,EAAAA,eAAAA,CAAAA,eAAAA,CAAA,aAAU,CAAA,CAAA,GAAV,SAAA;AACA,EAAAA,eAAAA,CAAAA,eAAAA,CAAA,UAAO,CAAA,CAAA,GAAP,MAAA;AAHQ,EAAA,OAAAA,eAAAA;AAAA,CAAA,EAAA,cAAA,IAAA,EAAA;AAqFL,IAAK,SAAA,qBAAAC,UAAAA,KAAL;AACH,EAAAA,UAAAA,CAAAA,UAAAA,CAAA,WAAQ,CAAA,CAAA,GAAR,OAAA;AACA,EAAAA,UAAAA,CAAAA,UAAAA,CAAA,eAAY,CAAA,CAAA,GAAZ,WAAA;AAFQ,EAAA,OAAAA,UAAAA;AAAA,CAAA,EAAA,SAAA,IAAA,EAAA;;;AClGL,IAAK,cAAA,qBAAAC,eAAAA,KAAL;AACH,EAAAA,gBAAA,cAAA,CAAA,GAAe,cAAA;AACf,EAAAA,gBAAA,MAAA,CAAA,GAAO,MAAA;AACP,EAAAA,gBAAA,OAAA,CAAA,GAAQ,OAAA;AACR,EAAAA,gBAAA,eAAA,CAAA,GAAgB,eAAA;AAChB,EAAAA,gBAAA,cAAA,CAAA,GAAe,cAAA;AAEf,EAAAA,gBAAA,gBAAA,CAAA,GAAiB,gBAAA;AACjB,EAAAA,gBAAA,QAAA,CAAA,GAAS,QAAA;AACT,EAAAA,gBAAA,UAAA,CAAA,GAAW,UAAA;AAEX,EAAAA,gBAAA,WAAA,CAAA,GAAY,WAAA;AACZ,EAAAA,gBAAA,cAAA,CAAA,GAAe,cAAA;AAEf,EAAAA,gBAAA,eAAA,CAAA,GAAgB,eAAA;AAChB,EAAAA,gBAAA,kBAAA,CAAA,GAAmB,kBAAA;AACnB,EAAAA,gBAAA,mBAAA,CAAA,GAAoB,mBAAA;AAEpB,EAAAA,gBAAA,cAAA,CAAA,GAAe,cAAA;AACf,EAAAA,gBAAA,cAAA,CAAA,GAAe,cAAA;AAEf,EAAAA,gBAAA,cAAA,CAAA,GAAe,cAAA;AACf,EAAAA,gBAAA,aAAA,CAAA,GAAc,aAAA;AACd,EAAAA,gBAAA,cAAA,CAAA,GAAe,cAAA;AAEf,EAAAA,gBAAA,eAAA,CAAA,GAAgB,eAAA;AAChB,EAAAA,gBAAA,eAAA,CAAA,GAAgB,eAAA;AAChB,EAAAA,gBAAA,cAAA,CAAA,GAAe,cAAA;AAEf,EAAAA,gBAAA,eAAA,CAAA,GAAgB,eAAA;AAEhB,EAAAA,gBAAA,SAAA,CAAA,GAAU,SAAA;AA/BF,EAAA,OAAAA,eAAAA;AAAA,CAAA,EAAA,cAAA,IAAA,EAAA;AA6NL,SAAS,oBAAA,CAAqB,GAAA,EAAa,IAAA,EAAmB,IAAA,EAAsB,GAAA,EAAyB;AAhOpH,EAAA,IAAA,EAAA;AAiOI,EAAA,MAAM,QAAA,GAAW,UAAA,IAAc,IAAA,GAAO,IAAA,CAAK,WAAW,IAAA,CAAK,OAAA;AAE3D,EAAA,IAAI,QAAQ,cAAA,qBAA6B;AACrC,IAAA,OAAO,EAAE,IAAA,EAAM,GAAA,EAAK,IAAA,EAAsC,QAAA,EAAU,QAAQ,KAAA,EAAM;AAAA,EACtF,WACI,IAAA,IAAQ,eAAA,wBACR,IAAA,IAAQ,aAAA,sBACR,QAAQ,kBAAA,yBACV;AACE,IAAA,OAAO;AAAA,MACH,IAAA;AAAA,MACA,GAAA;AAAA,MACA,IAAA;AAAA,MACA,QAAA;AAAA,MACA,MAAA,EAAS,KAA6B,OAAA,IAAW;AAAA,KACrD;AAAA,EACJ,CAAA,MAAA,IAAW,QAAQ,mBAAA,0BAAkC;AACjD,IAAA,OAAO;AAAA,MACH,IAAA;AAAA,MACA,GAAA;AAAA,MACA,IAAA;AAAA,MACA,QAAA;AAAA,MACA,MAAA,EAAS,KAA6B,OAAA,IAAW;AAAA,KACrD;AAAA,EACJ,CAAA,MAAA,IAAW,IAAA,IAAQ,cAAA,uBAA+B,IAAA,IAAQ,cAAA,qBAA6B;AACnF,IAAA,OAAO;AAAA,MACH,IAAA;AAAA,MACA,GAAA;AAAA,MACA,IAAA;AAAA,MACA,QAAA;AAAA,MACA,MAAA,EAAS,KAA0B,QAAA,IAAY;AAAA,KACnD;AAAA,EACJ,CAAA,MAAA,IAAW,IAAA,IAAQ,eAAA,wBAAgC,IAAA,IAAQ,eAAA,sBAA8B;AACrF,IAAA,OAAO;AAAA,MACH,IAAA;AAAA,MACA,GAAA;AAAA,MACA,IAAA;AAAA,MACA,QAAA;AAAA,MACA,QAAS,IAAA,CAAkC,aAAA,CAAc,KAAK,CAAC,QAAA,KAAa,YAAY,GAAG;AAAA,KAC/F;AAAA,EACJ,CAAA,MAAA,IAAW,QAAQ,cAAA,qBAA6B;AAC5C,IAAA,OAAO;AAAA,MACH,IAAA;AAAA,MACA,GAAA;AAAA,MACA,IAAA;AAAA,MACA,QAAA;AAAA,MACA,MAAA,EAAS,KAAgC,SAAA,IAAa;AAAA,KAC1D;AAAA,EACJ,CAAA,MAAO;AACH,IAAA,MAAM,QAAA,GAAW,IAAA;AAEjB,IAAA,OAAO;AAAA,MACH,IAAA;AAAA,MACA,GAAA;AAAA,MACA,IAAA,EAAM,QAAA;AAAA,MACN,QAAA;AAAA,MACA,MAAA,EAAA,CAAA,CAAQ,EAAA,GAAA,QAAA,CAAS,aAAA,KAAT,IAAA,GAAA,MAAA,GAAA,EAAA,CAAwB,IAAA,CAAK,CAAC,MAAA,KAAW,MAAA,CAAO,EAAA,IAAM,GAAA,CAAA,KAAQ,QAAA,CAAS,QAAA,IAAY;AAAA,KAC/F;AAAA,EACJ;AACJ;;;AC7MO,IAAM,cAAN,MAAkB;AAAA,EAUrB,WAAA,CAAY,KAAa,IAAA,EAAgB;AATzC,IAAA,IAAA,CAAA,IAAA,GAAA,CAAA;AAUI,IAAA,IAAA,CAAK,IAAA,GAAO,IAAA;AACZ,IAAA,IAAA,CAAK,WAAW,IAAA,CAAK,OAAA,IAAW,GAAA,GAAM,IAAA,CAAK,OAAO,IAAA,CAAK,OAAA;AACvD,IAAA,IAAA,CAAK,MAAA,GAAS,KAAK,OAAA,IAAW,GAAA;AAE9B,IAAA,IAAI,IAAA,CAAK,IAAA,IAAQ,GAAA,EAAK,IAAA,CAAK,IAAA,GAAO,GAAA;AAClC,IAAA,IAAI,IAAA,CAAK,OAAA,IAAW,GAAA,EAAK,IAAA,CAAK,OAAA,GAAU,GAAA;AACxC,IAAA,IAAI,KAAK,KAAA,EAAO;AACZ,MAAA,IAAA,CAAK,KAAA,CAAM,OAAA,GAAU,MAAA,CAAO,IAAA,CAAK,MAAM,OAAO,CAAA;AAAA,IAClD;AAAA,EACJ;AACJ;AAEO,IAAM,eAAN,MAAmB;AAAA,EAUtB,WAAA,CAAY,KAAa,IAAA,EAAqB;AAT9C,IAAA,IAAA,CAAA,IAAA,GAAA,CAAA;AAUI,IAAA,IAAA,CAAK,IAAA,GAAO,IAAA;AACZ,IAAA,IAAA,CAAK,WAAW,IAAA,CAAK,IAAA;AACrB,IAAA,IAAA,CAAK,MAAA,GAAS,KAAK,OAAA,IAAW,GAAA;AAE9B,IAAA,IAAI,IAAA,CAAK,OAAA,IAAW,GAAA,EAAK,IAAA,CAAK,OAAA,GAAU,GAAA;AACxC,IAAA,IAAI,KAAK,KAAA,EAAO;AACZ,MAAA,IAAA,CAAK,KAAA,CAAM,OAAA,GAAU,MAAA,CAAO,IAAA,CAAK,MAAM,OAAO,CAAA;AAAA,IAClD;AAAA,EACJ;AACJ;;;AC1HO,IAAK,SAAA,qBAAAC,UAAAA,KAAL;AACH,EAAAA,WAAA,OAAA,CAAA,GAAQ,SAAA;AACR,EAAAA,WAAA,MAAA,CAAA,GAAO,UAAA;AACP,EAAAA,WAAA,MAAA,CAAA,GAAO,IAAA;AACP,EAAAA,WAAA,KAAA,CAAA,GAAM,IAAA;AACN,EAAAA,WAAA,KAAA,CAAA,GAAM,MAAA;AACN,EAAAA,WAAA,OAAA,CAAA,GAAQ,KAAA;AACR,EAAAA,WAAA,MAAA,CAAA,GAAO,KAAA;AACP,EAAAA,WAAA,cAAA,CAAA,GAAe,KAAA;AACf,EAAAA,WAAA,MAAA,CAAA,GAAO,QAAA;AACP,EAAAA,WAAA,MAAA,CAAA,GAAO,QAAA;AACP,EAAAA,WAAA,cAAA,CAAA,GAAe,SAAA;AACf,EAAAA,WAAA,SAAA,CAAA,GAAU,QAAA;AACV,EAAAA,WAAA,MAAA,CAAA,GAAO,KAAA;AACP,EAAAA,WAAA,UAAA,CAAA,GAAW,KAAA;AACX,EAAAA,WAAA,MAAA,CAAA,GAAO,KAAA;AACP,EAAAA,WAAA,MAAA,CAAA,GAAO,QAAA;AACP,EAAAA,WAAA,KAAA,CAAA,GAAM,MAAA;AACN,EAAAA,WAAA,UAAA,CAAA,GAAW,MAAA;AACX,EAAAA,WAAA,MAAA,CAAA,GAAO,QAAA;AACP,EAAAA,WAAA,IAAA,CAAA,GAAK,MAAA;AACL,EAAAA,WAAA,OAAA,CAAA,GAAQ,KAAA;AACR,EAAAA,WAAA,QAAA,CAAA,GAAS,UAAA;AACT,EAAAA,WAAA,OAAA,CAAA,GAAQ,SAAA;AACR,EAAAA,WAAA,OAAA,CAAA,GAAQ,SAAA;AACR,EAAAA,WAAA,MAAA,CAAA,GAAO,MAAA;AACP,EAAAA,WAAA,IAAA,CAAA,GAAK,MAAA;AACL,EAAAA,WAAA,KAAA,CAAA,GAAM,OAAA;AACN,EAAAA,WAAA,UAAA,CAAA,GAAW,SAAA;AACX,EAAAA,WAAA,KAAA,CAAA,GAAM,KAAA;AACN,EAAAA,WAAA,UAAA,CAAA,GAAW,KAAA;AACX,EAAAA,WAAA,MAAA,CAAA,GAAO,KAAA;AACP,EAAAA,WAAA,MAAA,CAAA,GAAO,KAAA;AACP,EAAAA,WAAA,WAAA,CAAA,GAAY,KAAA;AACZ,EAAAA,WAAA,YAAA,CAAA,GAAa,KAAA;AACb,EAAAA,WAAA,SAAA,CAAA,GAAU,MAAA;AACV,EAAAA,WAAA,UAAA,CAAA,GAAW,KAAA;AACX,EAAAA,WAAA,KAAA,CAAA,GAAM,OAAA;AACN,EAAAA,WAAA,QAAA,CAAA,GAAS,KAAA;AACT,EAAAA,WAAA,MAAA,CAAA,GAAO,OAAA;AACP,EAAAA,WAAA,KAAA,CAAA,GAAM,OAAA;AACN,EAAAA,WAAA,SAAA,CAAA,GAAU,KAAA;AACV,EAAAA,WAAA,UAAA,CAAA,GAAW,WAAA;AACX,EAAAA,WAAA,YAAA,CAAA,GAAa,KAAA;AACb,EAAAA,WAAA,SAAA,CAAA,GAAU,KAAA;AACV,EAAAA,WAAA,SAAA,CAAA,GAAU,KAAA;AACV,EAAAA,WAAA,SAAA,CAAA,GAAU,KAAA;AACV,EAAAA,WAAA,QAAA,CAAA,GAAS,KAAA;AACT,EAAAA,WAAA,UAAA,CAAA,GAAW,KAAA;AACX,EAAAA,WAAA,aAAA,CAAA,GAAc,KAAA;AACd,EAAAA,WAAA,QAAA,CAAA,GAAS,KAAA;AACT,EAAAA,WAAA,MAAA,CAAA,GAAO,KAAA;AACP,EAAAA,WAAA,WAAA,CAAA,GAAY,KAAA;AACZ,EAAAA,WAAA,MAAA,CAAA,GAAO,KAAA;AACP,EAAAA,WAAA,MAAA,CAAA,GAAO,QAAA;AACP,EAAAA,WAAA,MAAA,CAAA,GAAO,EAAA;AAvDC,EAAA,OAAAA,UAAAA;AAAA,CAAA,EAAA,SAAA,IAAA,EAAA;AA4EL,IAAM,WAAN,MAAe;AAAA,EAMlB,WAAA,CAAY,GAAA,EAAa,IAAA,EAAiB,OAAA,EAAkB;AACxD,IAAA,IAAA,CAAK,IAAA,GAAO,IAAA;AACZ,IAAA,IAAA,CAAK,WAAW,OAAA,IAAW,IAAA,CAAK,WAAW,GAAA,GAAM,IAAA,CAAK,OAAO,IAAA,CAAK,OAAA;AAClE,IAAA,IAAA,CAAK,MAAA,GAAS,KAAK,OAAA,IAAW,GAAA;AAC9B,IAAA,IAAA,CAAK,OAAA,GAAU,OAAA;AAEf,IAAA,IAAI,IAAA,CAAK,IAAA,IAAQ,GAAA,EAAK,IAAA,CAAK,IAAA,GAAO,GAAA;AAClC,IAAA,IAAI,IAAA,CAAK,OAAA,IAAW,GAAA,EAAK,IAAA,CAAK,OAAA,GAAU,GAAA;AAAA,EAC5C;AACJ;;;AC3FO,IAAK,kBAAA,qBAAAC,mBAAAA,KAAL;AACH,EAAAA,mBAAAA,CAAAA,mBAAAA,CAAA,UAAO,CAAA,CAAA,GAAP,MAAA;AACA,EAAAA,mBAAAA,CAAAA,mBAAAA,CAAA,WAAQ,CAAA,CAAA,GAAR,OAAA;AACA,EAAAA,mBAAAA,CAAAA,mBAAAA,CAAA,YAAS,CAAA,CAAA,GAAT,QAAA;AACA,EAAAA,mBAAAA,CAAAA,mBAAAA,CAAA,aAAU,CAAA,CAAA,GAAV,SAAA;AAJQ,EAAA,OAAAA,mBAAAA;AAAA,CAAA,EAAA,kBAAA,IAAA,EAAA;;;ACcL,IAAM,kBAAN,MAAsB;AAAA,EAOzB,YAAY,IAAA,EAAwB;AANpC,IAAA,IAAA,CAAA,IAAA,GAAA,CAAA;AAOI,IAAA,IAAA,CAAK,IAAA,GAAO,IAAA;AACZ,IAAA,IAAA,CAAK,WAAW,IAAA,CAAK,IAAA;AACrB,IAAA,IAAA,CAAK,MAAA,GAAS,KAAA;AAAA,EAClB;AACJ;AAEO,IAAM,mBAAN,MAAuB;AAAA,EAO1B,WAAA,CAAY,KAAa,IAAA,EAAyB;AANlD,IAAA,IAAA,CAAA,IAAA,GAAA,CAAA;AAOI,IAAA,IAAA,CAAK,IAAA,GAAO,IAAA;AACZ,IAAA,IAAA,CAAK,WAAW,IAAA,CAAK,OAAA;AACrB,IAAA,IAAA,CAAK,MAAA,GAAS,IAAA,CAAK,QAAA,CAAS,QAAA,CAAS,GAAG,CAAA;AAAA,EAC5C;AACJ;;;AC5BO,IAAM,aAAN,MAAiB;AAAA,EAOpB,YAAY,IAAA,EAAe;AAN3B,IAAA,IAAA,CAAA,IAAA,GAAA,CAAA;AAOI,IAAA,IAAA,CAAK,IAAA,GAAO,IAAA;AACZ,IAAA,IAAA,CAAK,WAAW,IAAA,CAAK,GAAA;AACrB,IAAA,IAAA,CAAK,MAAA,GAAS,KAAA;AAAA,EAClB;AACJ;AAEO,IAAM,cAAN,MAAkB;AAAA,EAOrB,YAAY,IAAA,EAAoB;AANhC,IAAA,IAAA,CAAA,IAAA,GAAA,CAAA;AAOI,IAAA,IAAA,CAAK,IAAA,GAAO,IAAA;AACZ,IAAA,IAAA,CAAK,WAAW,IAAA,CAAK,GAAA;AACrB,IAAA,IAAA,CAAK,MAAA,GAAS,KAAA;AAAA,EAClB;AACJ;;;ACTO,IAAM,OAAN,MAAW;AAAA,EAMd,WAAA,CAAY,GAAA,EAAa,IAAA,EAAa,OAAA,EAAkB;AACpD,IAAA,IAAA,CAAK,IAAA,GAAO,IAAA;AACZ,IAAA,IAAA,CAAK,WAAW,OAAA,IAAW,IAAA,CAAK,WAAW,GAAA,GAAM,IAAA,CAAK,OAAO,IAAA,CAAK,OAAA;AAClE,IAAA,IAAA,CAAK,MAAA,GAAS,KAAK,OAAA,IAAW,GAAA;AAC9B,IAAA,IAAA,CAAK,OAAA,GAAU,OAAA;AAEf,IAAA,IAAI,IAAA,CAAK,IAAA,IAAQ,GAAA,EAAK,IAAA,CAAK,IAAA,GAAO,GAAA;AAClC,IAAA,IAAI,IAAA,CAAK,OAAA,IAAW,GAAA,EAAK,IAAA,CAAK,OAAA,GAAU,GAAA;AAAA,EAC5C;AACJ;;;ACvCO,IAAK,gBAAA,qBAAAC,iBAAAA,KAAL;AACH,EAAAA,iBAAAA,CAAAA,iBAAAA,CAAA,WAAQ,CAAA,CAAA,GAAR,OAAA;AACA,EAAAA,iBAAAA,CAAAA,iBAAAA,CAAA,gBAAa,CAAA,CAAA,GAAb,YAAA;AACA,EAAAA,iBAAAA,CAAAA,iBAAAA,CAAA,0BAAuB,CAAA,CAAA,GAAvB,sBAAA;AACA,EAAAA,iBAAAA,CAAAA,iBAAAA,CAAA,0BAAuB,CAAA,CAAA,GAAvB,sBAAA;AACA,EAAAA,iBAAAA,CAAAA,iBAAAA,CAAA,0BAAuB,CAAA,CAAA,GAAvB,sBAAA;AACA,EAAAA,iBAAAA,CAAAA,iBAAAA,CAAA,uBAAoB,CAAA,CAAA,GAApB,mBAAA;AACA,EAAAA,iBAAAA,CAAAA,iBAAAA,CAAA,wBAAqB,CAAA,CAAA,GAArB,oBAAA;AACA,EAAAA,iBAAAA,CAAAA,iBAAAA,CAAA,uBAAoB,CAAA,CAAA,GAApB,mBAAA;AACA,EAAAA,iBAAAA,CAAAA,iBAAAA,CAAA,sBAAmB,CAAA,CAAA,GAAnB,kBAAA;AACA,EAAAA,iBAAAA,CAAAA,iBAAAA,CAAA,uBAAoB,CAAA,CAAA,GAApB,mBAAA;AACA,EAAAA,iBAAAA,CAAAA,iBAAAA,CAAA,qBAAkB,EAAA,CAAA,GAAlB,iBAAA;AACA,EAAAA,iBAAAA,CAAAA,iBAAAA,CAAA,2BAAwB,EAAA,CAAA,GAAxB,uBAAA;AACA,EAAAA,iBAAAA,CAAAA,iBAAAA,CAAA,4BAAyB,EAAA,CAAA,GAAzB,wBAAA;AACA,EAAAA,iBAAAA,CAAAA,iBAAAA,CAAA,oBAAiB,EAAA,CAAA,GAAjB,gBAAA;AACA,EAAAA,iBAAAA,CAAAA,iBAAAA,CAAA,wBAAqB,EAAA,CAAA,GAArB,oBAAA;AAfQ,EAAA,OAAAA,iBAAAA;AAAA,CAAA,EAAA,gBAAA,IAAA,EAAA;AAkBL,IAAM,oBAAA,GAAyD;AAAA,EAClE,CAAC,gBAAyB,yDAAA;AAAA,EAC1B,CAAC,qBAA8B,kCAAA;AAAA,EAC/B,CAAC,+BAAwC,wCAAA;AAAA,EACzC,CAAC,+BAAwC,gCAAA;AAAA,EACzC,CAAC,+BAAwC,yCAAA;AAAA,EACzC,CAAC,4BAAqC,+BAAA;AAAA,EACtC,CAAC,6BAAsC,0CAAA;AAAA,EACvC,CAAC,4BAAqC,0BAAA;AAAA,EACtC,CAAC,2BAAoC,wBAAA;AAAA,EACrC,CAAC,4BAAqC,gCAAA;AAAA,EACtC,CAAC,2BAAmC,8CAAA;AAAA,EACpC,CAAC,iCAAyC,yCAAA;AAAA,EAC1C,CAAC,kCAA0C,uCAAA;AAAA,EAC3C,CAAC,0BAAkC,mBAAA;AAAA,EACnC,CAAC,8BAAsC;AAC3C;;;ACsIA,IAAM,UAAA,GAAa,IAAI,EAAA,GAAK,GAAA;AAC5B,IAAM,YAAA,GAAN,cAA2B,GAAA,CAA4B;AAAA;AAAA;AAAA;AAAA,EAInD,GAAA,CAAI,GAAA,EAAa,KAAA,EAAuB,GAAA,GAAc,UAAA,EAAkB;AACpE,IAAA,UAAA,CAAW,MAAM;AACb,MAAA,IAAA,CAAK,OAAO,GAAG,CAAA;AAAA,IACnB,GAAG,GAAG,CAAA;AACN,IAAA,OAAO,KAAA,CAAM,GAAA,CAAI,GAAA,EAAK,KAAK,CAAA;AAAA,EAC/B;AACJ,CAAA;AAWO,IAAM,aAAA,GAAgB,CAAC,OAAA,GAAU,EAAA,EAAI,aAAa,GAAA,MACpD;AAAA,EACG,QAAA,EAAU,OAAA;AAAA,EACV,WAAA,EAAa,UAAA;AAAA,EACb,eAAA,EAAiB,IAAI,YAAA,EAAa;AAAA,EAClC,OAAA,EAAS;AAAA,IACL,UAAA,EAAY,KAAA;AAAA,IACZ,WAAA,EAAa,IAAA;AAAA,IACb,OAAA,EAAS,IAAA;AAAA,IACT,UAAU,MAAA,CAAO;AAAA,GACrB;AAAA,EACA,SAAA,EAAW;AACf,CAAA,CAAA;AAIG,SAAS,iBAAiB,GAAA,EAAyC;AACtE,EAAA,OAAO,CAAC,CAAC,GAAA,CAAI,SAAA;AACjB;AAEO,IAAM,qBAAA,GAAwB,EAAA;ACrM9B,SAAS,MAAA,CAAO,KAA8B,GAAA,EAAsC;AACvF,EAAA,OAAO,MAAA,CAAO,SAAA,CAAU,cAAA,CAAe,IAAA,CAAK,KAAK,GAAG,CAAA;AACxD;AAUO,SAAS,UAAA,CAAW,MAAc,MAAA,EAAiC;AACtE,EAAA,MAAM,IAAI,EAAC;AACX,EAAA,KAAA,MAAW,KAAK,MAAA,EAAQ;AACpB,IAAA,IAAI,MAAA,CAAO,MAAA,EAAQ,CAAC,CAAA,EAAG;AACnB,MAAA,CAAA,CAAE,KAAK,CAAC,CAAA;AAAA,IACZ;AAAA,EACJ;AAEA,EAAA,CAAA,CAAE,IAAA,EAAK;AACP,EAAA,IAAI,IAAI,SAAA,GAAY,IAAA;AACpB,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,CAAA,CAAE,MAAA,EAAQ,KAAK,CAAA,IAAK,MAAA,CAAO,CAAA,CAAE,CAAC,CAAC,CAAA;AACnD,EAAA,OAAO,QAAA,CAAS,GAAA,CAAI,CAAC,CAAA,CAAE,QAAA,EAAS;AACpC;AAUO,SAAS,QACZ,GAAA,EACA,OAAA,EACA,SAA0C,EAAC,EAC3C,aAAsB,IAAA,EACxB;AACE,EAAA,MAAM,GAAA,GAAM,IAAI,GAAA,CAAI,OAAO,CAAA;AAC3B,EAAA,KAAA,MAAW,OAAO,MAAA,EAAQ;AACtB,IAAA,IAAI,MAAA,CAAO,MAAA,EAAQ,GAAG,CAAA,EAAG;AACrB,MAAA,GAAA,CAAI,aAAa,MAAA,CAAO,GAAA,EAAK,OAAO,GAAG,CAAA,CAAE,UAAU,CAAA;AAAA,IACvD;AAAA,EACJ;AAEA,EAAA,IAAI,UAAA,EAAY;AACZ,IAAA,IAAI,CAAC,GAAA,CAAI,YAAA,CAAa,GAAA,CAAI,SAAS,CAAA,EAAG,GAAA,CAAI,YAAA,CAAa,GAAA,CAAI,SAAA,EAAW,GAAA,CAAI,WAAA,CAAY,UAAU,CAAA;AAChG,IAAA,IAAI,CAAC,GAAA,CAAI,YAAA,CAAa,GAAA,CAAI,UAAU,CAAA,EAAG,GAAA,CAAI,YAAA,CAAa,GAAA,CAAI,UAAA,EAAY,GAAA,CAAI,QAAA,CAAS,UAAU,CAAA;AAAA,EACnG;AAEA,EAAA,OAAO,IAAI,QAAA,EAAS;AACxB;AAEO,IAAM,eAAA,GAAN,MAAM,gBAAA,CAAgB;AAAA,EAKzB,WAAA,CAAY,EAAE,IAAA,EAAM,IAAA,EAAM,iBAAgB,EAA4D;AAJtG,IAAA,IAAA,CAAQ,IAAA,GAAsB,IAAA;AAK1B,IAAA,IAAA,CAAK,OAAA,GAAU,IAAA;AACf,IAAA,IAAA,CAAK,IAAA,GAAO,IAAA;AACZ,IAAA,IAAA,CAAK,UAAA,GAAa,IAAA;AAElB,IAAA,IAAA,CAAK,UAAA,CAAW,IAAA,EAAM,IAAA,EAAM,eAAe,CAAA;AAC3C,IAAA,IAAA,CAAK,QAAA,GAAW,iBAAgB,YAAA,EAAa;AAC7C,IAAA,IAAA,CAAK,gBAAA,EAAiB;AAAA,EAC1B;AAAA,EAEA,aAAA,GAAgB;AACZ,IAAA,IAAI,CAAC,IAAA,CAAK,UAAA,EAAY,MAAM,IAAI,aAAa,6CAA6C,CAAA;AAC1F,IAAA,OAAO,IAAA,CAAK,UAAA;AAAA,EAChB;AAAA,EAEA,UAAA,CAAW,IAAA,EAAc,IAAA,EAAc,eAAA,EAAyB;AAC5D,IAAA,IAAI,CAAC,QAAQ,CAAC,IAAA,IAAQ,CAAC,eAAA,EAAiB,MAAM,IAAI,YAAA,CAAa,4BAA4B,CAAA;AAC3F,IAAA,MAAM,MAAM,CAAA,EAAG,IAAI,CAAA,CAAA,EAAI,IAAI,IAAI,eAAe,CAAA,CAAA;AAC9C,IAAA,MAAM,IAAI,gBAAA,CAAgB,SAAA,CAAU,kCAAA,EAAoC,GAAA,EAAK,OAAO,IAAI,CAAA;AACxF,IAAA,IAAA,CAAK,IAAA,GAAO,CAAA;AAAA,EAChB;AAAA,EAEA,gBAAA,CAAiB,IAAI,CAAA,EAAG;AACpB,IAAA,MAAM,CAAA,GAAI,CAACC,EAAAA,EAAWC,EAAAA,KAAc;AAChC,MAAA,MAAM,EAAE,IAAA,EAAM,CAAA,EAAE,GAAI,gBAAA,CAAgB,WAAWD,EAAC,CAAA,EAC5C,EAAE,IAAA,EAAM,GAAG,GAAA,EAAK,CAAA,EAAE,GAAI,gBAAA,CAAgB,WAAWC,EAAC,CAAA;AACtD,MAAA,IAAI,CAAC,CAAA,IAAK,CAAC,CAAA,IAAK,CAAC,GAAG,OAAO,KAAA;AAC3B,MAAA,MAAM,CAAA,GAAI,CAAA,CAAE,KAAA,CAAM,CAAA,EAAG,CAAC,EAAE,IAAA,CAAK,EAAE,CAAA,GAAI,CAAA,CAAE,KAAA,CAAM,CAAA,EAAG,EAAE,CAAA,CAAE,IAAA,CAAK,EAAE,CAAA,GAAI,CAAA,CAAE,OAAA,EAAQ,CAAE,KAAA,CAAM,CAAA,EAAG,EAAE,CAAA,CAAE,IAAA,CAAK,EAAE,CAAA;AAC7F,MAAA,OAAQ,IAAA,CAAK,aAAa,CAAA,EAAI,IAAA;AAAA,IAClC,CAAA;AACA,IAAA,IAAI,CAAC,KAAK,IAAA,IAAQ,CAAC,KAAK,QAAA,EAAU,MAAM,IAAI,YAAA,CAAa,4CAA4C,CAAA;AACrG,IAAA,IAAI;AACA,MAAA,MAAM,CAAA,GAAI,SAAS,GAAA,CAAI,IAAA,CAAK,QAAQ,CAAA,CAAE,QAAA,GAAW,WAAA,EAAY;AAC7D,MAAA,IAAI,CAAA,CAAE,GAAG,IAAA,CAAK,IAAI,KAAK,EAAE,CAAA,GAAI,IAAI,OAAO,KAAA;AACxC,MAAA,IAAA,CAAK,gBAAA,CAAiB,IAAI,CAAC,CAAA;AAAA,IAC/B,SAAQD,EAAAA,EAAA;AACJ,MAAA,IAAI,CAAA,GAAI,CAAA,EAAG,IAAA,CAAK,gBAAA,CAAiB,IAAI,CAAC,CAAA;AAAA,IAC1C;AACA,IAAA,OAAO,IAAA;AAAA,EACX;AAAA,EAEA,SAAA,GAAY;AACR,IAAA,OAAO,KAAK,IAAA,GACN;AAAA,MACI,MAAM,IAAA,CAAK,IAAA;AAAA,MACX,UAAU,IAAA,CAAK,QAAA;AAAA,MACf,SAAS,IAAA,CAAK;AAAA,KAClB,GACA,IAAA;AAAA,EACV;AAAA,EAEA,OAAO,WAAW,CAAA,EAAW;AACzB,IAAA,IAAI,CAAC,CAAA,IAAK,QAAA,IAAY,OAAO,CAAA;AACzB,MAAA,OAAO;AAAA,QACH,IAAA,EAAM,IAAA;AAAA,QACN,GAAA,EAAK;AAAA,OACT;AACJ,IAAA,MAAM,CAAC,CAAA,EAAG,CAAC,CAAA,GAAI,CAAC,GAAG,CAAC,CAAA,CAAE,MAAA,CAAO,CAACA,EAAAA,EAAGC,EAAAA,EAAGC,EAAAA,MAAOF,GAAEE,EAAAA,GAAI,CAAC,CAAA,CAAE,IAAA,CAAKD,EAAC,CAAA,EAAGD,EAAAA,CAAAA,EAAI,CAAC,EAAC,EAAG,EAAE,CAAe,CAAA;AACvF,IAAA,OAAO;AAAA,MACH,IAAA,EAAM,CAAA;AAAA,MACN,GAAA,EAAK;AAAA,KACT;AAAA,EACJ;AAAA,EAEA,OAAO,YAAA,CAAa,CAAA,EAAY,CAAA,EAAY;AACxC,IAAA,MAAM,CAAA,GAAI,KAAK,CAAA,EACX,CAAA,GAAI,KAAK,CAAA,IAAK,CAAA,GAAI,IAAI,CAAA,GAAI,EAAA;AAC9B,IAAA,IAAI,CAAA,GAAI,KAAK,KAAA,CAAM,IAAA,CAAK,QAAO,IAAK,CAAA,GAAI,CAAA,GAAI,CAAA,CAAE,CAAA,GAAI,CAAA;AAClD,IAAA,IAAI,IAAI,EAAA,EAAI;AACR,MAAA,IAAIA,EAAAA,GAAI,EAAA;AACR,MAAA,OAAO,IAAI,CAAA,IAAK;AACZ,QAAAA,EAAAA,IAAK,IAAA,CAAK,MAAA,EAAO,CACZ,QAAA,CAAS,EAAE,CAAA,CACX,MAAA,CAAO,CAAA,EAAG,CAAA,GAAI,EAAA,GAAK,EAAA,GAAK,CAAC,CAAA;AAC9B,QAAA,CAAA,IAAK,EAAA;AAAA,MACT;AACA,MAAA,OAAOA,EAAAA;AAAA,IACX;AACA,IAAA,OAAO,IAAA,CAAK,QAAO,CAAE,QAAA,CAAS,EAAE,CAAA,CAAE,MAAA,CAAO,GAAG,CAAC,CAAA;AAAA,EACjD;AAAA,EAEA,OAAO,SAAA,CAAU,CAAA,EAAW,SAAiB,IAAA,EAAwB,SAAA,EAAoB,IAAI,CAAA,EAAkB;AAC3G,IAAA,IAAI,CAAC,SAAS,OAAO,IAAA;AACrB,IAAA,IAAI;AACA,MAAA;AACI,QAAA,MAAM,UAAU,KAAA,IAAS,IAAA,GAAO,SAAS,GAAA,CAAI,GAAA,GAAM,SAAS,GAAA,CAAI,MAAA;AAChE,QAAA,MAAM,GAAA,GAAM,QAAA,CAAS,GAAA,CAAI,IAAA,CAAK,MAAM,CAAC,CAAA;AAErC,QAAA,MAAM,GAAA,GAAM;AAAA,UACR,KAAA,EAAO,CAAC,CAAA,EAAG,CAAA,EAAG,GAAG,CAAC,CAAA;AAAA,UAClB,QAAA,EAAU;AAAA,SACd;AACA,QAAA,MAAM,SAAA,GAAY,QAAA,CAAS,GAAA,CAAI,OAAA,CAAQ,SAAS,GAAA,EAAK;AAAA,UACjD,EAAA,EAAI,GAAA;AAAA,UACJ,IAAA,EAAM,SAAS,IAAA,CAAK,GAAA;AAAA,UACpB,OAAA,EAAS,SAAS,GAAA,CAAI;AAAA,SACzB,CAAA,CAAE,UAAA,CAAW,QAAA,CAAS,OAAO,CAAA;AAE9B,QAAA,OAAO,SAAA,GAAY,SAAA,CAAU,WAAA,EAAY,GAAI,SAAA;AAAA,MACjD;AAAA,IACJ,SAAQA,EAAAA,EAAA;AACJ,MAAA,OAAO,CAAA,GAAI,CAAA,GAAI,gBAAA,CAAgB,SAAA,CAAU,CAAA,EAAG,SAAS,IAAA,EAAM,SAAA,EAAW,CAAA,GAAI,CAAC,CAAA,GAAI,IAAA;AAAA,IACnF;AAAA,EACJ;AACJ,CAAA;AAEO,SAAS,WAAA,CAAY,KAAa,IAAA,EAAuD;AAC5F,EAAA,IAAI,CAAA,GAAI,IAAA;AACR,EAAA,IAAI;AACA,IAAA,CAAA,GAAI,aAAA,CAAc,KAAK,IAAI,CAAA;AAC3B,IAAA,MAAM,MAAA,GAAS,IAAA,CAAK,KAAA,CAAM,CAAC,CAAA;AAC3B,IAAA,OAAO,MAAA;AAAA,EACX,CAAA,CAAA,OAAQ,CAAA,EAAA;AACJ,IAAA,OAAO,CAAA;AAAA,EACX;AACJ;AAEA,SAAS,aAAA,CAAc,KAAa,IAAA,EAAc;AAC9C,EAAA,IAAA,GAAO,mBAAmB,IAAI,CAAA;AAC9B,EAAA,MAAM,SAAA,GAAY,QAAA,CAAS,GAAA,CAAI,IAAA,CAAK,MAAM,GAAG,CAAA;AAC7C,EAAA,MAAM,CAAA,GAAI;AAAA,IACN,KAAA,EAAO,CAAC,CAAA,EAAG,CAAA,EAAG,GAAG,CAAC,CAAA;AAAA,IAClB,QAAA,EAAU;AAAA,GACd;AAEA,EAAA,OAAO,SAAS,GAAA,CAAI,OAAA;AAAA,IAChB;AAAA,MACI,UAAA,EAAY,QAAA,CAAS,GAAA,CAAI,MAAA,CAAO,MAAM,IAAI;AAAA,KAC9C;AAAA,IACA,SAAA;AAAA,IACA;AAAA,MACI,EAAA,EAAI,CAAA;AAAA,MACJ,IAAA,EAAM,SAAS,IAAA,CAAK,GAAA;AAAA,MACpB,OAAA,EAAS,SAAS,GAAA,CAAI;AAAA;AAC1B,GACJ,CAAE,QAAA,CAAS,QAAA,CAAS,GAAA,CAAI,IAAI,CAAA;AAChC;AAEO,SAAS,qBAAqB,IAAA,EAAc;AAC/C,EAAA,OAAO,MAAA,CAAO,IAAA,CAAK,IAAA,EAAM,QAAQ,CAAA;AACrC;AAEO,SAAS,iBAAiB,IAAA,EAAkB;AAC/C,EAAA,IAAI;AACA,IAAA,OAAO,IAAI,WAAA,EAAY,CAAE,MAAA,CAAO,IAAI,CAAA;AAAA,EACxC,CAAA,CAAA,OAAQ,CAAA,EAAA;AACJ,IAAA,OAAO,IAAA;AAAA,EACX;AACJ;AAEO,SAAS,SAAA,CAAU,SAAA,EAAmB,IAAA,EAAuC,CAAA,GAAI,CAAA,EAAkB;AACtG,EAAA,IAAI;AACA,IAAA,MAAM,GAAA,GAAM,QAAA,CAAS,GAAA,CAAI,MAAA,CAAO,MAAM,SAAS,CAAA;AAC/C,IAAA,OAAO,QAAA,CAAS,GAAA,CAAI,OAAA,CAAQ,IAAA,EAAM,GAAA,EAAK;AAAA,MACnC,EAAA,EAAI,QAAA,CAAS,GAAA,CAAI,GAAA,CAAI,MAAM,kCAAkC,CAAA;AAAA,MAC7D,IAAA,EAAM,SAAS,IAAA,CAAK,GAAA;AAAA,MACpB,OAAA,EAAS,SAAS,GAAA,CAAI;AAAA,KACzB,CAAA,CAAE,UAAA,CAAW,QAAA,CAAS,QAAA,CAAS,IAAI,MAAM,CAAA;AAAA,EAC9C,CAAA,CAAA,OAAQ,CAAA,EAAA;AACJ,IAAA,OAAO,IAAI,CAAA,GAAI,SAAA,CAAU,WAAW,IAAA,EAAM,CAAA,GAAI,CAAC,CAAA,GAAI,IAAA;AAAA,EACvD;AACJ;AAEO,SAAS,SAAA,CAAU,SAAA,EAAmB,IAAA,EAAc,CAAA,GAAI,CAAA,EAAkB;AAC7E,EAAA,IAAI;AACA,IAAA,IAAA,GAAO,mBAAmB,IAAI,CAAA;AAC9B,IAAA,MAAM,GAAA,GAAM,QAAA,CAAS,GAAA,CAAI,MAAA,CAAO,MAAM,SAAS,CAAA;AAC/C,IAAA,OAAO,SAAS,GAAA,CAAI,OAAA;AAAA,MAChB;AAAA,QACI,UAAA,EAAY,QAAA,CAAS,GAAA,CAAI,MAAA,CAAO,MAAM,IAAI;AAAA,OAC9C;AAAA,MACA,GAAA;AAAA,MACA;AAAA,QACI,EAAA,EAAI,QAAA,CAAS,GAAA,CAAI,GAAA,CAAI,MAAM,kCAAkC,CAAA;AAAA,QAC7D,IAAA,EAAM,SAAS,IAAA,CAAK,GAAA;AAAA,QACpB,OAAA,EAAS,SAAS,GAAA,CAAI;AAAA;AAC1B,KACJ,CAAE,QAAA,CAAS,QAAA,CAAS,GAAA,CAAI,IAAI,CAAA;AAAA,EAChC,CAAA,CAAA,OAAQ,CAAA,EAAA;AACJ,IAAA,OAAO,IAAI,CAAA,GAAI,SAAA,CAAU,WAAW,IAAA,EAAM,CAAA,GAAI,CAAC,CAAA,GAAI,IAAA;AAAA,EACvD;AACJ;AAEA,eAAsB,iBAAA,CAAkB,GAAA,EAAkB,MAAA,GAAiB,sBAAA,EAAwB;AAC/F,EAAA,IAAI,CAAC,GAAA,CAAI,MAAA,EAAQ,MAAM,IAAI,aAAa,yBAAyB,CAAA;AACjE,EAAA,IAAI,CAAC,GAAA,CAAI,SAAA,EAAW,MAAM,IAAI,aAAa,6BAA6B,CAAA;AAExE,EAAA,OAAO;AAAA,IACH,MAAA,EAAQ,mCAAA;AAAA,IACR,iBAAA,EAAmB,yBAAA;AAAA,IACnB,iBAAA,EAAmB,gBAAA;AAAA,IACnB,cAAA,EAAgB,mCAAA;AAAA,IAChB,MAAA,EAAQ,MAAM,GAAA,CAAI,MAAA,CAAO,gBAAgB,MAAM,CAAA;AAAA,IAC/C,MAAA,EAAQ,sBAAA;AAAA,IACR,OAAA,EAAS,uBAAA;AAAA,IACT,cAAc,GAAA,CAAI;AAAA,GACtB;AACJ;AAEA,eAAsB,OAAA,CAAQ,GAAA,EAAkB,GAAA,EAAa,OAAA,EAAuB,MAAM,KAAA,EAAO;AAC7F,EAAA,IAAI,CAAC,GAAA,CAAI,MAAA,MAAY,MAAA,GAAS,IAAI,YAAY,SAAA,EAAU;AACxD,EAAA,MAAM,MAAA,GAAS,IAAI,GAAA,CAAI,GAAG,CAAA,CAAE,MAAA;AAE5B,EAAA,MAAM,cAAA,GAAiB,MAAM,iBAAA,CAAkB,GAAA,EAAK,MAAM,CAAA;AAC1D,EAAA,IAAI,CAAC,GAAA,EAAK;AACN,IAAA,IAAI,OAAA,EAAS;AACT,MAAA,OAAA,CAAQ,UAAU,MAAA,CAAO,MAAA,CAAO,gBAAgB,OAAA,CAAQ,OAAA,IAAW,EAAE,CAAA;AAAA,IACzE,CAAA,MAAO,OAAA,GAAU,EAAE,OAAA,EAAS,cAAA,EAAe;AAAA,EAC/C;AAEA,EAAA,MAAM,QAAA,GAAW,cAAA,CAAA,cAAA,CAAA,EAAA,EACT,OAAA,IAAA,IAAA,GAAA,OAAA,GAAW,KAKX,EAAE,KAAA,EAAO,GAAA,CAAI,QAAQ,KAAA,EAAM,CAAA;AAGnC,EAAA,MAAM,WAAW,MAAM,GAAA,CAAI,OAAA,CAAQ,QAAA,CAAS,KAAK,QAAQ,CAAA;AACzD,EAAA,MAAM,YAAA,GAAe,QAAA,CAAS,OAAA,CAAQ,GAAA,CAAI,YAAY,CAAA;AACtD,EAAA,IAAI,YAAA,IAAgB,CAAC,GAAA,EAAK;AACtB,IAAA,MAAM,YAAA,GAAe,YAAA,CAAa,KAAA,CAAM,IAAI,CAAA;AAC5C,IAAA,KAAA,MAAW,UAAU,YAAA,EAAc;AAC/B,MAAA,MAAM,MAAA,GAAS,WAAA,CAAY,MAAA,CAAO,KAAA,CAAM,MAAM,CAAA;AAC9C,MAAA,IAAI;AACA,QAAA,IAAI,MAAA,EAAQ,MAAM,GAAA,CAAI,MAAA,CAAO,SAAA,CAAU,MAAA,EAAQ,MAAA,CAAO,MAAA,IAAU,SAAA,GAAY,CAAA,QAAA,EAAW,MAAA,CAAO,MAAM,KAAK,MAAM,CAAA;AAAA,MACnH,SAAS,KAAA,EAAgB;AACrB,QAAA,MAAA,CAAO,GAAG,CAAA,CAAE,KAAA,CAAM,KAAK,CAAA;AAAA,MAC3B;AAAA,IACJ;AAAA,EACJ;AAEA,EAAA,MAAM,WAAA,GAAc,QAAA,CAAS,OAAA,CAAQ,GAAA,CAAI,UAAU,CAAA;AACnD,EAAA,IAAI,WAAA,EAAa;AACb,IAAA,MAAM,kBAAkB,cAAA,CAAA,EAAA,EAAK,OAAA,CAAA;AAC7B,IAAA,eAAA,CAAgB,MAAA,GAAS,KAAA;AACzB,IAAA,IAAI,CAAC,GAAA,EAAK;AACN,MAAA,eAAA,CAAgB,OAAA,GAAU,IAAI,OAAA,CAAQ,eAAA,CAAgB,OAAO,CAAA;AAC7D,MAAA,eAAA,CAAgB,OAAA,CAAQ,GAAA,CAAI,SAAA,EAAW,qBAAqB,CAAA;AAAA,IAChE;AACA,IAAA,OAAO,MAAM,OAAA,CAAQ,GAAA,EAAK,WAAA,EAAa,eAAe,CAAA;AAAA,EAC1D;AAEA,EAAA,OAAO,QAAA;AACX;AAEA,eAAsB,gBAAA,CAAiB,KAAkB,QAAA,EAAkB;AACvE,EAAA,IAAI,CAAC,GAAA,CAAI,OAAA,CAAQ,mBAAA,EAAqB;AAClC,IAAA,MAAM,IAAI,iCAAA,EAAkC;AAAA,EAChD;AAEA,EAAA,MAAM,SAAA,GAAY,MAAM,GAAA,CAAI,OAAA,CAAQ,oBAAoB,QAAQ,CAAA;AAChE,EAAA,IAAI,CAAC,SAAA,EAAW;AACZ,IAAA,MAAM,IAAI,aAAa,8BAA8B,CAAA;AAAA,EACzD;AAEA,EAAA,MAAM,QAAA,GAAW,QAAA,CAAS,KAAA,CAAM,GAAG,EAAE,GAAA,EAAI;AAEzC,EAAA,OAAO;AAAA,IACH,QAAA;AAAA,IACA,WAAW,SAAA,CAAU,IAAA;AAAA,IACrB,OAAO,SAAA,CAAU,KAAA;AAAA,IACjB,QAAQ,SAAA,CAAU;AAAA,GACtB;AACJ;AAEA,eAAsB,YAAY,QAAA,EAAkB;AAChD,EAAA,OAAO,EAAA,CAAG,SAAS,IAAA,CAAK,QAAQ,EAAE,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,IAAI,CAAA;AACxD;AAEA,eAAsB,cAAA,CAAe,KAAkB,QAAA,EAAkB;AACrE,EAAA,IAAI,CAAC,GAAA,CAAI,OAAA,CAAQ,mBAAA,EAAqB;AAClC,IAAA,MAAM,IAAI,iCAAA,EAAkC;AAAA,EAChD;AAEA,EAAA,MAAM,OAAA,GAAU,MAAM,GAAA,CAAI,OAAA,CAAQ,oBAAoB,QAAQ,CAAA;AAC9D,EAAA,IAAI,CAAC,OAAA,EAAS;AACV,IAAA,MAAM,IAAI,aAAa,4BAA4B,CAAA;AAAA,EACvD;AAEA,EAAA,MAAM,QAAA,GAAW,IAAA,CAAK,QAAA,CAAS,QAAQ,CAAA;AAEvC,EAAA,OAAO;AAAA,IACH,QAAA;AAAA,IACA,WAAW,OAAA,CAAQ,IAAA;AAAA,IACnB,OAAO,OAAA,CAAQ,KAAA;AAAA,IACf,QAAQ,OAAA,CAAQ;AAAA,GACpB;AACJ;AAEA,eAAsB,eAAA,CAAgB,QAAiC,SAAA,EAAoB;AACvF,EAAA,IAAI,OAAO,OAAO,IAAA,KAAS,QAAA;AACvB,IAAA,MAAM,IAAI,YAAA,CAAa,CAAA,sCAAA,EAAyC,OAAO,MAAA,CAAO,IAAI,CAAA,CAAE,CAAA;AACxF,EAAA,IAAI,OAAO,OAAO,OAAA,KAAY,QAAA;AAC1B,IAAA,MAAM,IAAI,YAAA,CAAa,CAAA,8CAAA,EAAiD,OAAO,MAAA,CAAO,OAAO,CAAA,CAAE,CAAA;AACnG,EAAA,IAAI,MAAA,CAAO,OAAA,GAAU,CAAA,IAAK,MAAA,CAAO,OAAA,GAAU,CAAA;AACvC,IAAA,MAAM,IAAI,YAAA,CAAa,CAAA,2CAAA,EAA8C,MAAA,CAAO,OAAO,CAAA,CAAE,CAAA;AAEzF,EAAA,MAAM,UAAU,MAAA,CAAO,IAAA;AACvB,EAAA,MAAM,cAAc,MAAA,CAAO,OAAA;AAE3B,EAAA,IAAI,WAAA,KAAgB,CAAA,EAAG,OAAO,IAAA,CAAK,MAAM,OAAO,CAAA;AAEhD,EAAA,MAAM,gBAAgB,oBAAA,CAAqB,WAAA,KAAgB,IAAI,OAAA,GAAU,kBAAA,CAAmB,OAAO,CAAC,CAAA;AAEpG,EAAA,IAAI,eAAA,GAAwC,aAAA;AAC5C,EAAA,IAAI,gBAAgB,CAAA,EAAG;AACnB,IAAA,IAAI,SAAA,IAAa,aAAA,CAAc,MAAA,IAAU,EAAA,EAAI;AACzC,MAAA,MAAM,SAAA,GAAY;AAAA,QACd,IAAA,EAAM,SAAA;AAAA,QACN,EAAA,EAAI,aAAA,CAAc,QAAA,CAAS,CAAA,EAAG,EAAE,CAAA;AAAA,QAChC,SAAA,EAAW,GAAA;AAAA,QACX,cAAA,EAAgB,aAAA,CAAc,QAAA,CAAS,EAAA,EAAI,EAAE;AAAA,OACjD;AACA,MAAA,MAAM,UAAA,GAAa,aAAA,CAAc,QAAA,CAAS,EAAE,CAAA;AAE5C,MAAA,MAAM,SAAA,GAAY,MAAM,MAAA,CAAO,MAAA,CAAO,SAAA,CAAU,OAAO,oBAAA,CAAqB,SAAS,CAAA,EAAG,SAAA,EAAW,KAAA,EAAO;AAAA,QACtG;AAAA,OACH,CAAA;AACD,MAAA,eAAA,GAAkB,MAAM,MAAA,CAAO,MAAA,CAAO,OAAA,CAAQ,SAAA,EAAW,WAAW,UAAU,CAAA;AAAA,IAClF,CAAA,MAAO;AACH,MAAA,MAAM,IAAI,aAAa,2CAA2C,CAAA;AAAA,IACtE;AAAA,EACJ;AAEA,EAAA,MAAM,kBAAA,GACF,gBAAgB,CAAA,GAAI,IAAI,WAAW,eAAe,CAAA,GAAI,IAAA,CAAK,OAAA,CAAQ,eAA8B,CAAA;AACrG,EAAA,MAAM,WAAA,GAAc,iBAAiB,kBAAkB,CAAA;AAEvD,EAAA,IAAI,CAAC,WAAA,EAAa;AAClB,EAAA,OAAO,OAAA,CAAQ,MAAM,WAAW,CAAA;AACpC;AAEA,eAAsB,qBAAA,CAAsB,QAA0B,QAAA,EAAkB;AACpF,EAAA,MAAM,MAAA,GAAS,OAAO,MAAA,IAAU,QAAA,GAAW,MAAM,GAAG,QAAA,CAAS,QAAA,CAAS,MAAM,CAAA,GAAI,MAAA,CAAO,IAAA;AACvF,EAAA,OAAO,IAAI,OAAA,CAGR,CAAC,OAAA,KAAY;AACZ,IAAA,IAAI,YAAA,GAAe,CAAA;AACnB,IAAA,MAAM,SAAA,GAAY,OAAA,EACd,MAAA,GAAS,IAAA,CAAK,IAAA,CAAK,QAAA,GAAW,SAAS,CAAA,EACvC,KAAA,GAAQ,IAAI,QAAA,CAAS,WAAA,EAAY;AAErC,IAAA,SAAS,QAAA,GAAW;AAChB,MAAA,MAAM,KAAA,GAAQ,eAAe,SAAA,EACzB,GAAA,GAAM,QAAQ,SAAA,IAAa,QAAA,GAAW,WAAW,KAAA,GAAQ,SAAA;AAE7D,MAAA,KAAA,CAAM,MAAA,CAAO,IAAI,UAAA,CAAW,MAAA,CAAO,SAAS,KAAA,EAAO,GAAG,CAAC,CAAA,CAAE,MAAqB,CAAA;AAC9E,MAAA,YAAA,EAAA;AAEA,MAAA,IAAI,eAAe,MAAA,EAAQ;AACvB,QAAA,QAAA,EAAS;AAAA,MACb,CAAA,MAAO;AACH,QAAA,OAAA,CAAQ;AAAA,UACJ,YAAA;AAAA,UACA,IAAA,EAAM,MAAM,GAAA;AAAI,SACnB,CAAA;AAAA,MACL;AAAA,IACJ;AAEA,IAAA,QAAA,EAAS;AAAA,EACb,CAAC,CAAA;AACL;AAEO,IAAM,MAAA,GAAS,CAAC,GAAA,MAA6C;AAAA,EAChE,OAAA,EAAS,IAAI,IAAA,KAAoB;AAC7B,IAAA,IAAI,IAAI,OAAA,CAAQ,OAAA,UAAiB,GAAA,CAAI,kCAAA,EAA6B,GAAG,IAAI,CAAA;AAAA,EAC7E,CAAA;AAAA,EACA,IAAA,EAAM,IAAI,IAAA,KAAoB;AAC1B,IAAA,IAAI,IAAI,OAAA,CAAQ,OAAA,UAAiB,GAAA,CAAI,qBAAA,EAAuB,GAAG,IAAI,CAAA;AAAA,EACvE,CAAA;AAAA,EACA,IAAA,EAAM,IAAI,IAAA,KAAoB;AAC1B,IAAA,IAAI,IAAI,OAAA,CAAQ,OAAA,UAAiB,GAAA,CAAI,qBAAA,EAAuB,GAAG,IAAI,CAAA;AAAA,EACvE,CAAA;AAAA,EACA,KAAA,EAAO,IAAI,IAAA,KAAoB;AAC3B,IAAA,IAAI,IAAI,OAAA,CAAQ,OAAA,UAAiB,GAAA,CAAI,sBAAA,EAAwB,GAAG,IAAI,CAAA;AAAA,EACxE,CAAA;AAAA,EACA,OAAA,EAAS,IAAI,IAAA,KAAoB;AAC7B,IAAA,IAAI,IAAI,OAAA,CAAQ,OAAA,UAAiB,GAAA,CAAI,wBAAA,EAA0B,GAAG,IAAI,CAAA;AAAA,EAC1E,CAAA;AAAA,EACA,SAAA,EAAW,IAAI,IAAA,KAAoB;AAC/B,IAAA,MAAM,GAAA,GAAA,iBAAM,IAAI,IAAA,EAAK,EAAE,WAAA,EAAY;AACnC,IAAA,IAAI,GAAA,CAAI,QAAQ,OAAA,EAAS,OAAA,CAAQ,IAAI,CAAA,SAAA,EAAY,GAAG,CAAA,QAAA,CAAA,EAAY,GAAG,IAAI,CAAA;AAAA,EAC3E;AACJ,CAAA,CAAA;AAEO,SAAS,qBAAqB,OAAA,EAAiB;AAClD,EAAA,IAAI,OAAA,KAAY,WAAW,OAAO,CAAA;AAClC,EAAA,IAAI,OAAA,KAAY,cAAc,OAAO,EAAA;AACrC,EAAA,IAAI,OAAA,KAAY,cAAc,OAAO,EAAA;AACrC,EAAA,IAAI,OAAA,KAAY,gBAAgB,OAAO,EAAA;AACvC,EAAA,IAAI,OAAA,KAAY,eAAe,OAAO,EAAA;AACtC,EAAA,IAAI,OAAA,KAAY,oBAAoB,OAAO,EAAA;AAE3C,EAAA,IAAI,OAAA,KAAY,aAAa,OAAO,EAAA;AACpC,EAAA,IAAI,OAAA,KAAY,kBAAkB,OAAO,EAAA;AAEzC,EAAA,IAAI,OAAA,KAAY,cAAc,OAAO,EAAA;AACrC,EAAA,IAAI,OAAA,KAAY,YAAY,OAAO,EAAA;AACnC,EAAA,IAAI,OAAA,KAAY,qBAAqB,OAAO,EAAA;AAE5C,EAAA,OAAO,CAAA;AACX;AAEO,SAAS,UAAA,CAAW,CAAA,EAAoB,CAAA,EAAW,CAAA,EAAW;AACjE,EAAA,MAAM,CAAA,GAAA,CAAK,CAAA,GAAI,EAAA,GAAK,CAAA,EAAG,MAAA;AACvB,EAAA,OAAO,CAAA,KAAM,CAAA,GAAI,CAAA,GAAI,CAAA,GAAI,IAAI,CAAA,CAAE,KAAA,CAAM,CAAC,CAAC,CAAA,GAAI,CAAA,CAAE,MAAA,CAAO,CAAA,GAAI,CAAC,CAAA,GAAI,CAAA;AACjE;AAEO,SAAS,UAAA,CAAW,MAAA,EAAgB,SAAA,GAAoB,IAAA,CAAK,KAAI,EAAW;AAC/E,EAAA,MAAM,IAAA,GAAO,IAAI,IAAA,CAAK,SAAS,CAAA;AAG/B,EAAA,MAAM,OAAA,GAAsC;AAAA,IACxC,IAAA,EAAM,SAAA;AAAA,IACN,KAAA,EAAO,SAAA;AAAA,IACP,GAAA,EAAK,SAAA;AAAA,IACL,IAAA,EAAM,SAAA;AAAA,IACN,MAAA,EAAQ,SAAA;AAAA,IACR,MAAA,EAAQ;AAAA;AAAA,GAEZ;AAEA,EAAA,MAAM,SAAA,GAAY,IAAI,IAAA,CAAK,cAAA,CAAe,SAAS,OAAO,CAAA,CAAE,OAAO,IAAI,CAAA;AAEvE,EAAA,IAAI,OAAO,QAAA,CAAS,IAAI,KAAK,MAAA,CAAO,QAAA,CAAS,IAAI,CAAA,EAAG;AAChD,IAAA,OAAO,MAAA,CACF,OAAA,CAAQ,IAAA,EAAM,IAAA,CAAK,UAAS,CAAE,QAAA,EAAS,CAAE,QAAA,CAAS,CAAA,EAAG,GAAG,CAAC,CAAA,CACzD,QAAQ,IAAA,EAAM,IAAA,CAAK,UAAA,EAAW,CAAE,QAAA,EAAS,CAAE,QAAA,CAAS,CAAA,EAAG,GAAG,CAAC,CAAA,CAC3D,OAAA,CAAQ,IAAA,EAAM,IAAA,CAAK,UAAA,EAAW,CAAE,QAAA,GAAW,QAAA,CAAS,CAAA,EAAG,GAAG,CAAC,CAAA,CAC3D,OAAA,CAAQ,IAAA,EAAM,IAAA,CAAK,SAAQ,CAAE,QAAA,EAAS,CAAE,QAAA,CAAS,CAAA,EAAG,GAAG,CAAC,CAAA,CACxD,QAAQ,IAAA,EAAA,CAAO,IAAA,CAAK,QAAA,EAAS,GAAI,CAAA,EAAG,QAAA,EAAS,CAAE,QAAA,CAAS,GAAG,GAAG,CAAC,CAAA,CAC/D,OAAA,CAAQ,IAAA,EAAM,IAAA,CAAK,WAAA,EAAY,CAAE,UAAU,CAAA;AAAA,EACpD;AAEA,EAAA,OAAO,SAAA;AACX;AAEO,SAAS,2BAA2B,CAAA,EAAW;AAClD,EAAA,MAAM,CAAA,GAAI,IAAI,IAAA,CAAK,CAAC,CAAA;AACpB,EAAA,OACI,UAAA,CAAW,CAAA,CAAE,QAAA,EAAS,EAAG,KAAK,CAAC,CAAA,GAC/B,GAAA,GACA,UAAA,CAAW,EAAE,UAAA,EAAW,EAAG,GAAA,EAAK,CAAC,IACjC,GAAA,GACA,UAAA,CAAW,CAAA,CAAE,OAAA,EAAQ,EAAG,GAAA,EAAK,CAAC,CAAA,GAC9B,MACA,UAAA,CAAW,CAAA,CAAE,QAAA,EAAS,GAAI,GAAG,GAAA,EAAK,CAAC,CAAA,GACnC,GAAA,GACA,EAAE,WAAA,EAAY;AAEtB;AAEO,SAAS,iBAAiB,CAAA,EAAW;AACxC,EAAA,OAAO,IAAA,CAAK,OAAA,CAAQ,CAAC,CAAA,CAAE,MAAM,CAAC,CAAA;AAClC;AAEO,SAAS,YAAY,CAAA,EAAW;AACnC,EAAA,OAAO,IAAA,CAAK,SAAS,CAAC,CAAA;AAC1B;AAEO,SAAS,oBAAoB,CAAA,EAA4B;AAC5D,EAAA,KAAA,MAAW,CAAA,IAAK,GAAG,IAAI,CAAA,CAAE,CAAC,CAAA,KAAM,MAAA,EAAW,OAAO,CAAA,CAAE,CAAC,CAAA;AACrD,EAAA,OAAO,CAAA;AACX;AAEO,SAAS,kBAAkB,GAAA,EAAa;AAC3C,EAAA,IAAI,OAAO,cAAA,EAAgB,OAAA,cAAA;AAC3B,EAAA,IAAI,OAAO,MAAA,EAAQ,OAAA,MAAA;AACnB,EAAA,IAAI,OAAO,OAAA,EAAS,OAAA,OAAA;AACpB,EAAA,IAAI,OAAO,eAAA,EAAiB,OAAA,eAAA;AAC5B,EAAA,IAAI,OAAO,cAAA,EAAgB,OAAA,cAAA;AAC3B,EAAA,IAAI,OAAO,gBAAA,EAAkB,OAAA,gBAAA;AAC7B,EAAA,IAAI,OAAO,eAAA,EAAiB,OAAA,eAAA;AAC5B,EAAA,IAAI,OAAO,QAAA,EAAU,OAAA,QAAA;AACrB,EAAA,IAAI,OAAO,UAAA,EAAY,OAAA,UAAA;AACvB,EAAA,IAAI,OAAO,WAAA,EAAa,OAAA,WAAA;AACxB,EAAA,IAAI,OAAO,cAAA,EAAgB,OAAA,cAAA;AAE3B,EAAA,IAAI,OAAO,eAAA,EAAiB,OAAA,eAAA;AAC5B,EAAA,IAAI,OAAO,kBAAA,EAAoB,OAAA,kBAAA;AAC/B,EAAA,IAAI,OAAO,cAAA,EAAgB,OAAA,cAAA;AAC3B,EAAA,IAAI,OAAO,cAAA,EAAgB,OAAA,cAAA;AAC3B,EAAA,IAAI,OAAO,cAAA,EAAgB,OAAA,cAAA;AAC3B,EAAA,IAAI,OAAO,mBAAA,EAAqB,OAAA,mBAAA;AAChC,EAAA,IAAI,OAAO,aAAA,EAAe,OAAA,aAAA;AAC1B,EAAA,IAAI,OAAO,cAAA,EAAgB,OAAA,cAAA;AAC3B,EAAA,IAAI,OAAO,eAAA,EAAiB,OAAA,eAAA;AAC5B,EAAA,IAAI,OAAO,eAAA,EAAiB,OAAA,eAAA;AAC5B,EAAA,IAAI,OAAO,cAAA,EAAgB,OAAA,cAAA;AAE3B,EAAA,OAAA,SAAA;AACJ;AAEO,SAAS,mBAAmB,GAAA,EAAa;AAC5C,EAAA,IAAI,OAAO,KAAA,EAAO,OAAA,CAAA;AAClB,EAAA,IAAI,OAAO,QAAA,EAAU,OAAA,CAAA;AACrB,EAAA,IAAI,OAAO,OAAA,EAAS,OAAA,CAAA;AACpB,EAAA,IAAI,OAAO,SAAA,EAAW,OAAA,CAAA;AACtB,EAAA,IAAI,OAAO,YAAA,EAAc,OAAA,CAAA;AACzB,EAAA,IAAI,OAAO,cAAA,EAAgB,OAAA,CAAA;AAE3B,EAAA,IAAI,OAAO,QAAA,EAAU,OAAA,CAAA;AACrB,EAAA,IAAI,OAAO,QAAA,EAAU,OAAA,CAAA;AACrB,EAAA,IAAI,OAAO,UAAA,EAAY,OAAA,CAAA;AAEvB,EAAA,IAAI,OAAO,aAAA,EAAe,OAAA,CAAA;AAE1B,EAAA,IAAI,OAAO,WAAA,EAAa,OAAA,EAAA;AACxB,EAAA,IAAI,OAAO,YAAA,EAAc,OAAA,EAAA;AAEzB,EAAA,OAAA,EAAA;AACJ;AAUA,eAAsB,kBAAA,CAAgC,GAAA,EAAqB,QAAA,EAAoB,WAAA,GAAc,IAAA,EAAM;AAC/G,EAAA,MAAM,MAAA,GAA0B;AAAA,IAC5B,IAAA,EAAM,IAAA;AAAA,IACN,KAAA,EAAO;AAAA,GACX;AAEA,EAAA,IAAI,CAAC,SAAS,EAAA,EAAI;AACd,IAAA,MAAA,CAAO,KAAA,GAAQ;AAAA,MACX,OAAA,EAAS,qCAAqC,QAAA,CAAS;AAAA,KAC3D;AACA,IAAA,OAAO,MAAA;AAAA,EACX;AAEA,EAAA,IAAI;AACA,IAAA,MAAM,QAAA,GAIF,MAAM,QAAA,CAAS,IAAA,EAAK;AAExB,IAAA,IAAI,QAAA,CAAS,cAAc,CAAA,EAAG;AAC1B,MAAA,MAAA,CAAO,KAAA,GAAQ;AAAA,QACX,SAAS,QAAA,CAAS,aAAA;AAAA,QAClB,MAAM,QAAA,CAAS;AAAA,OACnB;AACA,MAAA,OAAO,MAAA;AAAA,IACX;AAEA,IAAA,MAAM,WAAA,GAIF,WAAA,GAAc,IAAA,CAAK,KAAA,CAAM,SAAA,CAAU,IAAI,SAAA,EAAY,QAAA,CAAS,IAAI,CAAE,CAAA,GAAI,QAAA;AAE1E,IAAA,IAAI,WAAA,CAAY,cAAc,CAAA,EAAG;AAC7B,MAAA,MAAA,CAAO,KAAA,GAAQ;AAAA,QACX,SAAS,WAAA,CAAY,aAAA;AAAA,QACrB,MAAM,WAAA,CAAY;AAAA,OACtB;AACA,MAAA,OAAO,MAAA;AAAA,IACX;AAEA,IAAA,MAAA,CAAO,OAAO,WAAA,CAAY,IAAA;AAAA,EAC9B,SAAS,KAAA,EAAO;AACZ,IAAA,MAAA,CAAO,GAAG,CAAA,CAAE,KAAA,CAAM,gCAAA,EAAkC,KAAK,CAAA;AACzD,IAAA,MAAA,CAAO,KAAA,GAAQ;AAAA,MACX,OAAA,EAAS;AAAA,KACb;AAAA,EACJ;AAEA,EAAA,OAAO,MAAA;AACX;AAEA,eAAsB,eAAA,CAClB,GAAA,EACA,GAAA,EACA,EAAA,EACA,WAAA,EACF;AACE,EAAA,MAAM,MAAA,GAAS,MAAM,kBAAA,CAAsB,GAAA,EAAK,KAAK,WAAW,CAAA;AAChE,EAAA,IAAI,MAAA,CAAO,KAAA,EAAO,MAAM,IAAI,YAAA,CAAa,OAAO,KAAA,CAAM,OAAA,EAAS,MAAA,CAAO,KAAA,CAAM,IAAI,CAAA;AAChF,EAAA,IAAI,EAAA,EAAI,OAAO,EAAA,CAAG,MAAM,CAAA;AAExB,EAAA,OAAO,MAAA,CAAO,IAAA;AAClB;AAkBO,SAAS,UAAA,GAAgB;AAC5B,EAAA,OAAO,CAA+E,QAAA,KAAgB;AAClG,IAAA,OAAO,CAAC,KAAkB,GAAA,KAAa;AACnC,MAAA,IAAI,CAAC,gBAAA,CAAiB,GAAG,CAAA,EAAG,MAAM,IAAI,YAAA,CAAa,kBAAA,GAAqB,IAAA,CAAK,SAAA,CAAU,GAAA,EAAK,IAAA,EAAM,CAAC,CAAC,CAAA;AAEpG,MAAA,MAAM,KAAA,GAAQ;AAAA,QACV,OAAA,CAAQ,OAAA,EAAiB,MAAA,EAA0C,UAAA,EAAsB;AACrF,UAAA,OAAO,OAAA,CAAQ,GAAA,EAAK,OAAA,EAAS,MAAA,EAAQ,UAAU,CAAA;AAAA,QACnD,CAAA;AAAA,QACA,SAAA,CAAU,MAAuC,CAAA,EAAY;AACzD,UAAA,OAAO,SAAA,CAAU,GAAA,CAAI,SAAA,EAAW,IAAA,EAAM,CAAC,CAAA;AAAA,QAC3C,CAAA;AAAA,QACA,OAAA,CAAQ,GAAA,EAAa,OAAA,EAAuB,GAAA,EAAe;AACvD,UAAA,OAAO,OAAA,CAAQ,GAAA,EAAK,GAAA,EAAK,OAAA,EAAS,GAAG,CAAA;AAAA,QACzC,CAAA;AAAA,QACA,MAAA,EAAQ,OAAO,GAAG,CAAA;AAAA,QAClB,OAAA,EAAS,CAAC,GAAA,EAAe,EAAA,EAA2C,gBAChE,eAAA,CAAmB,GAAA,EAAK,GAAA,EAAK,EAAA,EAAI,WAAW;AAAA,OACpD;AAEA,MAAA,OAAO,QAAA,CAAS,GAAA,EAAK,GAAA,EAAK,KAAK,CAAA;AAAA,IACnC,CAAA;AAAA,EACJ,CAAA;AACJ;AAEO,SAAS,iBAAiB,SAAA,EAAmB;AAChD,EAAA,OAAO,MAAA,CAAO,YAAW,GAAI,GAAA,GAAM,SAAS,GAAA,CAAI,SAAS,EAAE,QAAA,EAAS;AACxE;AAOO,SAAS,WAAW,GAAA,EAAqB;AAC5C,EAAA,OAAO,MAAA,CAAO,WAAW,KAAK,CAAA,CAAE,OAAO,GAAG,CAAA,CAAE,OAAO,KAAK,CAAA;AAC5D;;;ACvsBO,IAAK,wBAAA,qBAAAG,yBAAAA,KAAL;AACH,EAAAA,yBAAAA,CAAAA,yBAAAA,CAAA,iBAAA,CAAA,GAAA,CAAA,CAAA,GAAA,iBAAA;AACA,EAAAA,yBAAAA,CAAAA,yBAAAA,CAAA,eAAA,CAAA,GAAA,CAAA,CAAA,GAAA,eAAA;AACA,EAAAA,yBAAAA,CAAAA,yBAAAA,CAAA,eAAA,CAAA,GAAA,CAAA,CAAA,GAAA,eAAA;AACA,EAAAA,yBAAAA,CAAAA,yBAAAA,CAAA,gBAAA,CAAA,GAAA,CAAA,CAAA,GAAA,gBAAA;AACA,EAAAA,yBAAAA,CAAAA,yBAAAA,CAAA,cAAA,CAAA,GAAA,CAAA,CAAA,GAAA,cAAA;AALQ,EAAA,OAAAA,yBAAAA;AAAA,CAAA,EAAA,wBAAA,IAAA,EAAA;AAkEZ,eAAe,cAAc,GAAA,EAAkB;AAC3C,EAAA,MAAM,QAAA,GAAW,MAAM,OAAA,CAAQ,GAAA,EAAK,mEAAA,EAAqE;AAAA,IACrG,OAAA,EAAS;AAAA,MACL,MAAA,EAAQ,yIAAA;AAAA,MACR,iBAAA,EAAmB,0DAAA;AAAA,MACnB,eAAA,EAAiB,WAAA;AAAA,MACjB,QAAA,EAAU,QAAA;AAAA,MACV,WAAA,EAAa,mEAAA;AAAA,MACb,kBAAA,EAAoB,IAAA;AAAA,MACpB,oBAAA,EAAsB,WAAA;AAAA,MACtB,gBAAA,EAAkB,UAAA;AAAA,MAClB,gBAAA,EAAkB,UAAA;AAAA,MAClB,gBAAA,EAAkB,WAAA;AAAA,MAClB,gBAAA,EAAkB,IAAA;AAAA,MAClB,2BAAA,EAA6B,GAAA;AAAA,MAC7B,OAAA,EAAS,uBAAA;AAAA,MACT,iBAAA,EAAmB;AAAA,KACvB;AAAA,IACA,MAAA,EAAQ;AAAA,GACX,CAAA;AAED,EAAA,MAAM,IAAA,GAAO,MAAM,QAAA,CAAS,IAAA,EAAK;AAEjC,EAAA,MAAM,KAAA,GAAQ,kDAAA;AACd,EAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,KAAA,CAAM,KAAK,CAAA;AAE9B,EAAA,OAAO,KAAA,IAAA,IAAA,GAAA,MAAA,GAAA,KAAA,CAAQ,CAAA,CAAA;AACnB;AAEA,eAAe,YAAA,CAAa,KAAkB,OAAA,EAAiB;AAC3D,EAAA,MAAM,IAAA,GAAO,IAAI,eAAA,EAAgB;AACjC,EAAA,IAAA,CAAK,MAAA,CAAO,YAAY,oBAAoB,CAAA;AAC5C,EAAA,IAAA,CAAK,MAAA,CAAO,KAAK,OAAO,CAAA;AAExB,EAAA,OAAO,MAAM,OAAA,CAAQ,GAAA,EAAK,sCAAA,EAAwC;AAAA,IAC9D,OAAA,EAAS;AAAA,MACL,MAAA,EAAQ,KAAA;AAAA,MACR,iBAAA,EAAmB,0DAAA;AAAA,MACnB,cAAA,EAAgB,mCAAA;AAAA,MAChB,QAAA,EAAU,QAAA;AAAA,MACV,WAAA,EAAa,mEAAA;AAAA,MACb,kBAAA,EAAoB,IAAA;AAAA,MACpB,oBAAA,EAAsB,WAAA;AAAA,MACtB,gBAAA,EAAkB,OAAA;AAAA,MAClB,gBAAA,EAAkB,MAAA;AAAA,MAClB,gBAAA,EAAkB,aAAA;AAAA,MAClB,OAAA,EAAS,gEAAA;AAAA,MACT,iBAAA,EAAmB;AAAA,KACvB;AAAA,IACA,IAAA,EAAM,IAAA;AAAA,IACN,MAAA,EAAQ;AAAA,GACX,CAAA,CACI,IAAA,CAAK,CAAC,GAAA,KAAQ,GAAA,CAAI,IAAA,EAAM,CAAA,CACxB,KAAA,CAAM,MAAA,CAAO,GAAG,EAAE,KAAK,CAAA;AAChC;AAEA,eAAe,YAAA,CAAa,KAAkB,OAAA,EAAiB;AAC3D,EAAA,MAAM,IAAA,GAAO,IAAI,eAAA,EAAgB;AACjC,EAAA,IAAA,CAAK,MAAA,CAAO,QAAQ,QAAQ,CAAA;AAC5B,EAAA,IAAA,CAAK,MAAA,CAAO,YAAY,oBAAoB,CAAA;AAC5C,EAAA,IAAA,CAAK,MAAA,CAAO,KAAK,OAAO,CAAA;AAExB,EAAA,OAAO,MAAM,OAAA,CAAQ,GAAA,EAAK,0CAAA,EAA4C;AAAA,IAClE,OAAA,EAAS;AAAA,MACL,MAAA,EAAQ,KAAA;AAAA,MACR,iBAAA,EAAmB,0DAAA;AAAA,MACnB,cAAA,EAAgB,mCAAA;AAAA,MAChB,QAAA,EAAU,QAAA;AAAA,MACV,WAAA,EAAa,mEAAA;AAAA,MACb,kBAAA,EAAoB,IAAA;AAAA,MACpB,oBAAA,EAAsB,WAAA;AAAA,MACtB,gBAAA,EAAkB,OAAA;AAAA,MAClB,gBAAA,EAAkB,MAAA;AAAA,MAClB,gBAAA,EAAkB,aAAA;AAAA,MAClB,OAAA,EAAS,gEAAA;AAAA,MACT,iBAAA,EAAmB;AAAA,KACvB;AAAA,IACA,IAAA,EAAM,IAAA;AAAA,IACN,MAAA,EAAQ;AAAA,GACX,CAAA,CACI,IAAA,CAAK,CAAC,GAAA,KAAQ,GAAA,CAAI,IAAA,EAAM,CAAA,CACxB,KAAA,CAAM,MAAA,CAAO,GAAG,EAAE,KAAK,CAAA;AAChC;AAEA,eAAe,QAAA,CACX,KACA,OAAA,EAYD;AACC,EAAA,MAAM,IAAA,GAAO,IAAI,eAAA,EAAgB;AACjC,EAAA,IAAA,CAAK,MAAA,CAAO,YAAY,oBAAoB,CAAA;AAC5C,EAAA,IAAA,CAAK,MAAA,CAAO,KAAK,OAAO,CAAA;AAExB,EAAA,OAAO,MAAM,OAAA,CAAQ,GAAA,EAAK,+CAAA,EAAiD;AAAA,IACvE,OAAA,EAAS;AAAA,MACL,MAAA,EAAQ,KAAA;AAAA,MACR,iBAAA,EAAmB,0DAAA;AAAA,MACnB,cAAA,EAAgB,mCAAA;AAAA,MAChB,QAAA,EAAU,QAAA;AAAA,MACV,WAAA,EAAa,mEAAA;AAAA,MACb,kBAAA,EAAoB,IAAA;AAAA,MACpB,oBAAA,EAAsB,WAAA;AAAA,MACtB,gBAAA,EAAkB,OAAA;AAAA,MAClB,gBAAA,EAAkB,MAAA;AAAA,MAClB,gBAAA,EAAkB,aAAA;AAAA,MAClB,OAAA,EAAS,gEAAA;AAAA,MACT,iBAAA,EAAmB;AAAA,KACvB;AAAA,IACA,IAAA,EAAM,IAAA;AAAA,IACN,MAAA,EAAQ;AAAA,GACX,CAAA,CACI,IAAA,CAAK,CAAC,GAAA,KAAQ,GAAA,CAAI,IAAA,EAAM,CAAA,CACxB,KAAA,CAAM,MAAA,CAAO,GAAG,EAAE,KAAK,CAAA;AAChC;AAEA,eAAe,gBAAA,CAAiB,UAAkB,SAAA,EAAmB;AACjE,EAAA,MAAM,SAAA,CAAU,QAAA,EAAU,SAAA,EAAW,QAAQ,CAAA;AACjD;AAEA,eAAe,WAAA,CACX,GAAA,EACA,OAAA,EACA,IAAA,EACA,MAAA,EAWF;AACE,EAAA,MAAM,IAAA,GAAO,IAAI,eAAA,EAAgB;AACjC,EAAA,IAAA,CAAK,MAAA,CAAO,QAAQ,IAAI,CAAA;AACxB,EAAA,IAAA,CAAK,MAAA,CAAO,YAAY,uBAAuB,CAAA;AAC/C,EAAA,IAAA,CAAK,MAAA,CAAO,KAAK,OAAO,CAAA;AAExB,EAAA,OAAO,MAAM,OAAA,CAAQ,GAAA,EAAK,mDAAA,EAAqD;AAAA,IAC3E,OAAA,EAAS;AAAA,MACL,MAAA,EAAQ,KAAA;AAAA,MACR,iBAAA,EAAmB,0DAAA;AAAA,MACnB,cAAA,EAAgB,mCAAA;AAAA,MAChB,QAAA,EAAU,QAAA;AAAA,MACV,WAAA,EAAa,mEAAA;AAAA,MACb,kBAAA,EAAoB,IAAA;AAAA,MACpB,oBAAA,EAAsB,WAAA;AAAA,MACtB,gBAAA,EAAkB,OAAA;AAAA,MAClB,gBAAA,EAAkB,MAAA;AAAA,MAClB,gBAAA,EAAkB,aAAA;AAAA,MAClB,OAAA,EAAS,mEAAA;AAAA,MACT,iBAAA,EAAmB;AAAA,KACvB;AAAA,IACA,IAAA,EAAM,IAAA;AAAA,IACN,MAAA,EAAQ,MAAA;AAAA,IACR;AAAA,GACH,CAAA,CACI,IAAA,CAAK,CAAC,GAAA,KAAQ,GAAA,CAAI,IAAA,EAAM,CAAA,CACxB,IAAA,CAAK,CAAC,IAAA,KAAS;AACZ,IAAA,IAAI,IAAA,CAAK,cAAc,CAAA,EAAG;AACtB,MAAA,OAAO,WAAA,CAAY,GAAA,EAAK,OAAA,EAAS,IAAA,EAAM,MAAM,CAAA;AAAA,IACjD;AAEA,IAAA,OAAO,IAAA;AAAA,EACX,CAAC,CAAA,CACA,KAAA,CAAM,CAAC,CAAA,KAAM;AACV,IAAA,IAAI,CAAC,MAAA,CAAO,OAAA,SAAgB,GAAG,CAAA,CAAE,MAAM,CAAC,CAAA;AAAA,EAC5C,CAAC,CAAA;AACT;AAEA,eAAe,cAAA,CACX,GAAA,EACA,OAAA,EACA,IAAA,EACA,MAAA,EAQF;AACE,EAAA,MAAM,IAAA,GAAO,IAAI,eAAA,EAAgB;AACjC,EAAA,IAAA,CAAK,MAAA,CAAO,QAAQ,IAAI,CAAA;AACxB,EAAA,IAAA,CAAK,MAAA,CAAO,UAAU,EAAE,CAAA;AACxB,EAAA,IAAA,CAAK,MAAA,CAAO,WAAW,YAAY,CAAA;AACnC,EAAA,IAAA,CAAK,MAAA,CAAO,YAAY,uBAAuB,CAAA;AAC/C,EAAA,IAAA,CAAK,MAAA,CAAO,KAAK,OAAO,CAAA;AAExB,EAAA,MAAA,CAAO,GAAG,CAAA,CAAE,IAAA,CAAK,8BAA8B,CAAA;AAE/C,EAAA,OAAO,MAAM,OAAA,CAAQ,GAAA,EAAK,sDAAA,EAAwD;AAAA,IAC9E,OAAA,EAAS;AAAA,MACL,MAAA,EAAQ,KAAA;AAAA,MACR,iBAAA,EAAmB,0DAAA;AAAA,MACnB,cAAA,EAAgB,mCAAA;AAAA,MAChB,QAAA,EAAU,QAAA;AAAA,MACV,WAAA,EAAa,mEAAA;AAAA,MACb,kBAAA,EAAoB,IAAA;AAAA,MACpB,oBAAA,EAAsB,WAAA;AAAA,MACtB,gBAAA,EAAkB,OAAA;AAAA,MAClB,gBAAA,EAAkB,MAAA;AAAA,MAClB,gBAAA,EAAkB,aAAA;AAAA,MAClB,OAAA,EAAS,mEAAA;AAAA,MACT,iBAAA,EAAmB;AAAA,KACvB;AAAA,IACA,IAAA,EAAM,IAAA;AAAA,IACN,MAAA,EAAQ,MAAA;AAAA,IACR;AAAA,GACH,CAAA,CACI,IAAA,CAAK,CAAC,GAAA,KAAQ,GAAA,CAAI,IAAA,EAAM,CAAA,CACxB,IAAA,CAAK,CAAC,IAAA,KAAS;AACZ,IAAA,IAAI,IAAA,CAAK,cAAc,CAAA,EAAG;AACtB,MAAA,OAAO,cAAA,CAAe,GAAA,EAAK,OAAA,EAAS,IAAA,EAAM,MAAM,CAAA;AAAA,IACpD;AAEA,IAAA,OAAO,IAAA;AAAA,EACX,CAAC,CAAA,CACA,KAAA,CAAM,CAAC,CAAA,KAAM;AACV,IAAA,IAAI,CAAC,MAAA,CAAO,OAAA,SAAgB,GAAG,CAAA,CAAE,MAAM,CAAC,CAAA;AAAA,EAC5C,CAAC,CAAA;AACT;AAEA,eAAe,aAAa,GAAA,EAAkB;AAC1C,EAAA,OAAO,MAAM,OAAA;AAAA,IACT,GAAA;AAAA,IACA,0FAAA;AAAA,IACA;AAAA,MACI,OAAA,EAAS;AAAA,QACL,MAAA,EAAQ,yIAAA;AAAA,QACR,iBAAA,EAAmB,0DAAA;AAAA,QACnB,QAAA,EAAU,QAAA;AAAA,QACV,WAAA,EAAa,mEAAA;AAAA,QACb,kBAAA,EAAoB,IAAA;AAAA,QACpB,oBAAA,EAAsB,WAAA;AAAA,QACtB,gBAAA,EAAkB,UAAA;AAAA,QAClB,gBAAA,EAAkB,UAAA;AAAA,QAClB,gBAAA,EAAkB,aAAA;AAAA,QAClB,2BAAA,EAA6B,GAAA;AAAA,QAC7B,OAAA,EAAS,mEAAA;AAAA,QACT,iBAAA,EAAmB;AAAA,OACvB;AAAA,MACA,QAAA,EAAU,QAAA;AAAA,MACV,MAAA,EAAQ;AAAA;AACZ,GACJ,CAAE,KAAA,CAAM,MAAA,CAAO,GAAG,EAAE,KAAK,CAAA;AAC7B;AAEA,eAAe,YAAY,GAAA,EAczB;AACE,EAAA,OAAO,MAAM,OAAA,CAAQ,GAAA,EAAK,qCAAA,EAAuC;AAAA,IAC7D,OAAA,EAAS;AAAA,MACL,MAAA,EAAQ,KAAA;AAAA,MACR,iBAAA,EAAmB,0DAAA;AAAA,MACnB,QAAA,EAAU,QAAA;AAAA,MACV,WAAA,EAAa,mEAAA;AAAA,MACb,kBAAA,EAAoB,IAAA;AAAA,MACpB,oBAAA,EAAsB,WAAA;AAAA,MACtB,gBAAA,EAAkB,OAAA;AAAA,MAClB,gBAAA,EAAkB,MAAA;AAAA,MAClB,gBAAA,EAAkB,WAAA;AAAA,MAClB,OAAA,EAAS,uBAAA;AAAA,MACT,iBAAA,EAAmB;AAAA,KACvB;AAAA,IACA,MAAA,EAAQ;AAAA,GACX,CAAA,CACI,IAAA,CAAK,CAAC,GAAA,KAAQ,GAAA,CAAI,IAAA,EAAM,CAAA,CACxB,KAAA,CAAM,MAAA,CAAO,GAAG,EAAE,KAAK,CAAA;AAChC;AAEA,eAAsB,OAAA,CAClB,GAAA,EACA,OAAA,EACA,QAAA,EACF;AACE,EAAA,GAAA,CAAI,MAAA,GAAS,IAAI,SAAA,EAAU;AAC3B,EAAA,GAAA,CAAI,YAAY,OAAA,CAAQ,SAAA;AAExB,EAAA,OAAO,IAAI,OAAA,CAQD,OAAO,OAAA,EAAS,MAAA,KAAW;AAnYzC,IAAA,IAAA,EAAA;AAoYQ,IAAA,MAAM,UAAA,GAAa,IAAI,eAAA,EAAgB;AACvC,IAAA,IAAI,SAAA,GAAmC,IAAA;AAEvC,IAAA,SAAS,OAAA,GAAU;AACf,MAAA,UAAA,CAAW,KAAA,EAAM;AACjB,MAAA,IAAI,SAAA,EAAW;AACX,QAAA,YAAA,CAAa,SAAS,CAAA;AACtB,QAAA,SAAA,GAAY,IAAA;AAAA,MAChB;AAAA,IACJ;AAEA,IAAA,IAAI;AACA,MAAA,IAASC,SAAT,WAAiB;AACb,QAAA,OAAA,EAAQ;AACR,QAAA,OAAO,OAAA,CAAQ,OAAA,CAAQ,GAAA,EAAK,OAAA,EAAS,QAAQ,CAAC,CAAA;AAAA,MAClD,CAAA,EAESC,SAAT,WAAiB;AACb,QAAA,OAAA,EAAQ;AACR,QAAA,OAAO,MAAA,CAAO,IAAI,qBAAA,EAAuB,CAAA;AAAA,MAC7C,CAAA;AARS,MAAA,IAAA,KAAA,GAAAD,QAKA,KAAA,GAAAC,MAAAA;AAKT,MAAA,IAAI,GAAA,CAAI,OAAA,CAAQ,OAAA,EAAS,OAAA,CAAQ,GAAA,EAAI;AAErC,MAAA,MAAM,YAAA,GAAe,MAAM,aAAA,CAAc,GAAG,CAAA;AAC5C,MAAA,IAAI,CAAC,YAAA,EAAc,MAAM,IAAI,aAAa,8BAA8B,CAAA;AAExE,MAAA,MAAA,CAAO,GAAG,CAAA,CAAE,IAAA,CAAK,oBAAA,EAAsB,YAAY,CAAA;AAEnD,MAAA,MAAM,YAAA,CAAa,KAAK,YAAY,CAAA;AACpC,MAAA,MAAM,YAAA,CAAa,KAAK,YAAY,CAAA;AACpC,MAAA,MAAM,WAAA,GAAc,MAAM,QAAA,CAAS,GAAA,EAAK,YAAY,CAAA;AACpD,MAAA,IAAI,CAAC,WAAA,IAAe,CAAC,WAAA,CAAY,IAAA;AAC7B,QAAA,MAAM,IAAI,YAAA,CAAa,CAAA;AAAA,UAAA,EAAwC,KAAK,SAAA,CAAU,WAAA,EAAa,IAAA,EAAM,CAAC,CAAC,CAAA,CAAE,CAAA;AAEzG,MAAA,MAAM,SAAS,WAAA,CAAY,IAAA;AAE3B,MAAA,IAAI,QAAA,EAAU;AACV,QAAA,QAAA,CAAS;AAAA,UACL,IAAA,EAAM,CAAA;AAAA,UACN,IAAA,EAAM,aAAA,CAAA,cAAA,CAAA,EAAA,EACC,WAAA,CAAY,IAAA,CAAA,EADb;AAAA,YAEF,OAAO,WAAA,CAAY,IAAA,CAAK,KAAA,CAAM,OAAA,CAAQ,4BAA4B,EAAE;AAAA,WACxE,CAAA;AAAA,UACA,OAAA,EAAS;AAAA,YACL,MAAM,UAAA,CAAW,MAAA,GAAA,CAAS,CAAA,EAAA,KAAA,CAAA,EAAA,GAAA,OAAA,CAAQ,MAAA,KAAR,YAAkB,QAAA,GAAA,EAAU;AAClD,cAAA,MAAM,iBAAiB,MAAA,EAAQ,MAAA,CAAO,MAAM,OAAA,CAAQ,0BAAA,EAA4B,EAAE,CAAC,CAAA;AACnF,cAAA,MAAA,CAAO,GAAG,CAAA,CAAE,IAAA,CAAK,uBAAuB,CAAA,CAAA,EAAI,MAAM,KAAK,uBAAuB,CAAA;AAAA,YAClF,CAAA;AAAA,YACA,KAAA,EAAAD,MAAAA;AAAA,YACA,KAAA,EAAAC;AAAA;AACJ,SACH,CAAA;AAAA,MACL,CAAA,MAAO;AACH,QAAA,MAAM,MAAA,GAAA,CAAS,EAAA,GAAA,OAAA,CAAQ,MAAA,KAAR,IAAA,GAAA,EAAA,GAAkB,QAAA;AAEjC,QAAA,MAAM,iBAAiB,MAAA,EAAQ,MAAA,CAAO,MAAM,OAAA,CAAQ,0BAAA,EAA4B,EAAE,CAAC,CAAA;AACnF,QAAA,MAAA,CAAO,GAAG,CAAA,CAAE,IAAA,CAAK,uBAAuB,CAAA,CAAA,EAAI,MAAM,KAAK,uBAAuB,CAAA;AAAA,MAClF;AAEA,MAAA,SAAA,GAAY,WAAW,MAAM;AACzB,QAAA,OAAA,EAAQ;AAER,QAAA,MAAA,CAAO,GAAG,CAAA,CAAE,IAAA,CAAK,aAAa,CAAA;AAE9B,QAAA,IAAI,QAAA,EAAU;AACV,UAAA,QAAA,CAAS;AAAA,YACL,IAAA,EAAM,CAAA;AAAA,YACN,IAAA,EAAM,IAAA;AAAA,YACN,OAAA,EAAS;AAAA,cACL,KAAA,EAAAD,MAAAA;AAAA,cACA,KAAA,EAAAC;AAAA;AACJ,WACH,CAAA;AAAA,QACL,CAAA,MAAO;AACH,UAAAD,MAAAA,EAAM;AAAA,QACV;AAAA,MACJ,GAAG,GAAO,CAAA;AAEV,MAAA,MAAM,UAAA,GAAa,MAAM,WAAA,CAAY,GAAA,EAAK,cAAc,WAAA,CAAY,IAAA,CAAK,IAAA,EAAM,UAAA,CAAW,MAAM,CAAA;AAChG,MAAA,IAAI,CAAC,cAAc,CAAC,UAAA,CAAW,MAAM,MAAM,IAAI,aAAa,wBAAwB,CAAA;AAEpF,MAAA,IAAI,QAAA,EAAU;AACV,QAAA,QAAA,CAAS;AAAA,UACL,IAAA,EAAM,CAAA;AAAA,UACN,MAAM,UAAA,CAAW,IAAA;AAAA,UACjB,OAAA,EAAS;AAAA,YACL,KAAA,EAAAA,MAAAA;AAAA,YACA,KAAA,EAAAC;AAAA;AACJ,SACH,CAAA;AAAA,MACL;AAEA,MAAA,MAAM,aAAA,GAAgB,MAAM,cAAA,CAAe,GAAA,EAAK,cAAc,WAAA,CAAY,IAAA,CAAK,IAAA,EAAM,UAAA,CAAW,MAAM,CAAA;AACtG,MAAA,IAAI,CAAC,aAAA,EAAe,MAAM,IAAI,aAAa,2BAA2B,CAAA;AAEtE,MAAA,YAAA,CAAa,SAAS,CAAA;AAEtB,MAAA,IAAI,aAAA,CAAc,cAAc,CAAA,EAAA,EAAK;AACjC,QAAA,IAAI,QAAA,EAAU;AACV,UAAA,QAAA,CAAS;AAAA,YACL,IAAA,EAAM,CAAA;AAAA,YACN,IAAA,EAAM;AAAA,cACF,MAAM,MAAA,CAAO;AAAA,aACjB;AAAA,YACA,OAAA,EAAS;AAAA,cACL,KAAA,EAAAD,MAAAA;AAAA,cACA,KAAA,EAAAC;AAAA;AACJ,WACH,CAAA;AAAA,QACL,CAAA,MAAO;AACH,UAAA,MAAA,CAAO,GAAG,CAAA,CAAE,KAAA,CAAM,uBAAuB,CAAA;AACzC,UAAA,MAAM,IAAI,sBAAA,EAAuB;AAAA,QACrC;AAEA,QAAA;AAAA,MACJ,CAAA,MAAA,IAAW,aAAA,CAAc,UAAA,IAAc,CAAA,EAAG;AACtC,QAAA,MAAM,IAAI,YAAA,CAAa,CAAA;AAAA,UAAA,EAAqC,KAAK,SAAA,CAAU,aAAA,EAAe,IAAA,EAAM,CAAC,CAAC,CAAA,CAAE,CAAA;AAAA,MACxG;AAEA,MAAA,MAAM,kBAAA,GAAqB,MAAM,YAAA,CAAa,GAAG,CAAA;AACjD,MAAA,IAAI,CAAC,kBAAA,EAAoB,MAAM,IAAI,aAAa,kCAAkC,CAAA;AAElF,MAAA,MAAA,CAAO,GAAG,CAAA,CAAE,IAAA,CAAK,sCAAA,EAAwC,UAAA,CAAW,KAAK,YAAY,CAAA;AAErF,MAAA,MAAM,QAAA,GAAW,MAAM,WAAA,CAAY,GAAG,CAAA;AACtC,MAAA,IAAI,CAAC,YAAY,CAAC,QAAA,CAAS,MAAM,MAAM,IAAI,aAAa,wBAAwB,CAAA;AAChF,MAAA,IAAI,CAAC,QAAA,CAAS,IAAA,CAAK,QAAQ,MAAM,IAAI,aAAa,aAAa,CAAA;AAE/D,MAAA,OAAA,CAAQ;AAAA,QACJ,OAAA,EAAS,GAAA,CAAI,MAAA,CAAQ,MAAA,EAAO,CAAG,OAAA;AAAA,QAC/B,QAAA,EAAU,SAAS,IAAA,CAAK;AAAA,OAC3B,CAAA;AAAA,IACL,SAAS,KAAA,EAAO;AACZ,MAAA,OAAA,EAAQ;AACR,MAAA,MAAA,CAAO,KAAK,CAAA;AAAA,IAChB;AAAA,EACJ,CAAC,CAAA;AACL;ACxgBA,eAAsB,KAAA,CAAM,KAAkB,aAAA,EAAwB;AAClE,EAAA,MAAM,eAAA,GAAkB,MAAM,eAAA,CAAgB,GAAA,EAAK,eAAe,cAAc,CAAA;AAEhF,EAAA,IAAI;AACA,IAAA,MAAM,WAAW,MAAM,OAAA;AAAA,MACnB,GAAA;AAAA,MACA,OAAA,CAAQ,GAAA,EAAK,iDAAA,EAAmD,aAAA,CAAA,cAAA,CAAA,EAAA,EACzD,gBAAgB,MAAA,CAAA,EADyC;AAAA,QAE5D,MAAA,EAAQ;AAAA,OACZ,CAAC;AAAA,KACL;AACA,IAAA,IAAI,CAAC,SAAS,EAAA,EAAI,MAAM,IAAI,YAAA,CAAa,8BAAA,GAAiC,SAAS,UAAU,CAAA;AAC7F,IAAA,MAAM,IAAA,GAAO,MAAM,QAAA,CAAS,IAAA,EAAK;AAEjC,IAAA,IAAI,gBAAgB,GAAA,EAAK;AACrB,MAAA,MAAM,aAAA,GAAgB,WAAA,CAAY,eAAA,CAAgB,GAAA,EAAK,KAAK,IAAI,CAAA;AAChE,MAAA,OAAO,aAAA,IAAiB,IAAA,IAAQ,OAAO,aAAA,IAAiB,WAAW,aAAA,GAAgB,IAAA;AAAA,IACvF;AAEA,IAAA,OAAO,IAAA;AAAA,EACX,SAAS,KAAA,EAAO;AACZ,IAAA,MAAA,CAAO,GAAG,CAAA,CAAE,KAAA,CAAM,eAAA,EAAiB,KAAK,CAAA;AACxC,IAAA,MAAM,KAAA;AAAA,EACV;AACJ;AAEA,eAAsB,aAAA,CAAc,KAAkB,aAAA,EAAwB;AAC1E,EAAA,MAAM,eAAA,GAAkB,MAAM,eAAA,CAAgB,GAAA,EAAK,eAAe,eAAe,CAAA;AACjF,EAAA,IAAI,CAAC,eAAA,CAAgB,MAAA,CAAO,WAAW,OAAO,eAAA,CAAgB,OAAO,OAAA,KAAY,QAAA;AAC7E,IAAA,MAAM,IAAI,aAAa,iBAAiB,CAAA;AAE5C,EAAA,MAAM,WAAW,MAAM,OAAA;AAAA,IACnB,GAAA;AAAA,IACA,OAAA;AAAA,MACI,GAAA;AAAA,MACA,kDAAA;AAAA,MACA;AAAA,QACI,MAAM,GAAA,CAAI,IAAA;AAAA,QACV,MAAM,GAAA,CAAI,QAAA;AAAA,QACV,gBAAgB,GAAA,CAAI,WAAA;AAAA,QACpB,aAAA,EAAe,KAAA;AAAA,QACf,OAAA,EAAS,gBAAgB,MAAA,CAAO;AAAA,OACpC;AAAA,MACA;AAAA;AACJ,GACJ;AACA,EAAA,IAAI,CAAC,SAAS,EAAA,EAAI,MAAM,IAAI,YAAA,CAAa,+BAAA,GAAkC,SAAS,UAAU,CAAA;AAC9F,EAAA,MAAM,IAAA,GAAO,MAAM,QAAA,CAAS,IAAA,EAAK;AAEjC,EAAA,IAAI,IAAA,CAAK,QAAQ,IAAA,EAAM,MAAM,IAAI,YAAA,CAAa,+BAAA,GAAkC,KAAK,aAAa,CAAA;AAClG,EAAA,OAAO,IAAA,CAAK,IAAA;AAChB;AAEA,eAAe,eAAA,CAAgB,GAAA,EAAkB,aAAA,EAAwB,IAAA,EAAc;AACnF,EAAA,MAAM,SAAS,EAAC;AAChB,EAAA,MAAM,IAAA,GAAO;AAAA,IACT,aAAA,EAAe,KAAA;AAAA,IACf,MAAM,GAAA,CAAI,IAAA;AAAA,IACV,UAAU,GAAA,CAAI,QAAA;AAAA,IACd,EAAA,EAAI,KAAK,GAAA;AAAI,GACjB;AACA,EAAA,MAAM,aAAA,GAAgB,MAAM,aAAA,CAAc,GAAA,EAAK,MAAM,aAAa,CAAA;AAElE,EAAA,IAAI,aAAA,IAAiB,IAAA,EAAMC,OAAA,CAAO,MAAA,EAAQ,IAAI,CAAA;AAAA,OACzC;AACD,IAAA,MAAM,EAAE,gBAAA,EAAkB,cAAA,EAAe,GAAI,aAAA;AAC7C,IAAAA,OAAA,CAAO,QAAQ,gBAAgB,CAAA;AAC/B,IAAA,MAAA,CAAO,MAAA,GAAS,cAAA;AAAA,EACpB;AAEA,EAAA,MAAA,CAAO,OAAO,GAAA,CAAI,QAAA;AAClB,EAAA,MAAA,CAAO,iBAAiB,GAAA,CAAI,WAAA;AAC5B,EAAA,MAAA,CAAO,OAAA,GACH,IAAA,IAAQ,eAAA,GACF,UAAA,CAAW,IAAA,EAAM;AAAA,IACb,MAAM,GAAA,CAAI,IAAA;AAAA,IACV,MAAM,GAAA,CAAI,QAAA;AAAA,IACV,gBAAgB,GAAA,CAAI,WAAA;AAAA,IACpB,aAAA,EAAe;AAAA,GAClB,CAAA,GACD,UAAA,CAAW,IAAA,EAAM,MAAM,CAAA;AAEjC,EAAA,OAAO;AAAA,IACH,MAAA;AAAA,IACA,GAAA,EAAK,aAAA,GAAgB,aAAA,CAAc,GAAA,GAAM;AAAA,GAC7C;AACJ;AAEA,eAAe,aAAA,CAAc,GAAA,EAAkB,IAAA,EAA+B,aAAA,EAAwB;AAClG,EAAA,IAAI,aAAA,EAAe;AACf,IAAA,MAAM,SAAA,GAAY,IAAI,eAAA,CAAgB;AAAA,MAClC,MAAM,GAAA,CAAI,QAAA;AAAA,MACV,MAAM,IAAA,CAAK,IAAA;AAAA,MACX,eAAA,EAAiB,KAAK,GAAA;AAAI,KAC7B,CAAA;AACD,IAAA,IAAI;AACA,MAAA,MAAM,eAAA,GAAkB,IAAA,CAAK,SAAA,CAAU,IAAI,CAAA;AAC3C,MAAA,MAAM,YAAA,GAAe,UAAU,aAAA,EAAc;AAC7C,MAAA,MAAM,cAAc,eAAA,CAAgB,SAAA,CAAU,YAAA,EAAc,eAAA,EAAiB,UAAU,KAAK,CAAA;AAC5F,MAAA,MAAM,MAAA,GAAS,UAAU,SAAA,EAAU;AAEnC,MAAA,OAAO,MAAA,GACD;AAAA,QACI,cAAA,EAAgB,WAAA;AAAA,QAChB,gBAAA,EAAkB,MAAA;AAAA,QAClB,GAAA,EAAK;AAAA,OACT,GACA,IAAA;AAAA,IACV,SAAS,KAAA,EAAO;AACZ,MAAA,MAAM,IAAI,YAAA,CAAa,4BAAA,GAA+B,KAAK,CAAA;AAAA,IAC/D;AAAA,EACJ;AACA,EAAA,OAAO,IAAA;AACX;ACnHA,IAAM,OAAA,GAAU,OAAA;AAChB,IAAM,YAAA,GAAe,mCAAA;AAErB,eAAsB,YAAY,GAAA,EAAkB;AAChD,EAAA,IAAI,CAAC,GAAA,CAAI,OAAA,CAAQ,WAAA,EAAa;AAE9B,EAAA,MAAM,QAAA,GAAW,mBAOP,EAAE,KAAA,EAAO,GAAA,CAAI,QAAQ,KAAA,EAAM,CAAA;AAErC,EAAA,MAAM,QAAA,GAAW,MAAM,GAAA,CAAI,OAAA,CAAQ,QAAA,CAAS,cAAc,QAAuB,CAAA,CAAE,KAAA,CAAM,MAAM,IAAI,CAAA;AACnG,EAAA,IAAI,CAAC,QAAA,IAAY,CAAC,QAAA,CAAS,EAAA,EAAI;AAE/B,EAAA,MAAM,OAAO,MAAM,QAAA,CAAS,MAAK,CAAE,KAAA,CAAM,MAAM,IAAI,CAAA;AACnD,EAAA,IAAI,CAAC,IAAA,EAAM;AAEX,EAAA,MAAM,aAAA,GAAgB,IAAA,CAAK,WAAW,CAAA,CAAE,MAAA;AACxC,EAAA,IAAI,OAAA,CAAQ,OAAA,EAAS,aAAa,CAAA,KAAM,EAAA,EAAI;AACxC,IAAA,MAAA,CAAO,GAAG,CAAA,CAAE,IAAA,CAAK,CAAA,sCAAA,EAAyC,aAAa,CAAA,CAAE,CAAA;AAAA,EAC7E,CAAA,MAAO;AACH,IAAA,MAAA,CAAO,GAAG,CAAA,CAAE,IAAA,CAAK,sBAAsB,CAAA;AAAA,EAC3C;AACJ;ACHO,IAAK,WAAA,qBAAAC,YAAAA,KAAL;AACH,EAAAA,YAAAA,CAAAA,YAAAA,CAAA,mBAAgB,GAAA,CAAA,GAAhB,eAAA;AACA,EAAAA,YAAAA,CAAAA,YAAAA,CAAA,qBAAkB,IAAA,CAAA,GAAlB,iBAAA;AACA,EAAAA,YAAAA,CAAAA,YAAAA,CAAA,yBAAsB,GAAA,CAAA,GAAtB,qBAAA;AACA,EAAAA,YAAAA,CAAAA,YAAAA,CAAA,oBAAiB,IAAA,CAAA,GAAjB,gBAAA;AAJQ,EAAA,OAAAA,YAAAA;AAAA,CAAA,EAAA,WAAA,IAAA,EAAA;AA0BL,IAAM,QAAA,GAAN,cAAuB,YAAA,CAA6B;AAAA,EA2BvD,WAAA,CACY,KACA,IAAA,EACV;AACE,IAAA,KAAA,EAAM;AAHE,IAAA,IAAA,CAAA,GAAA,GAAA,GAAA;AACA,IAAA,IAAA,CAAA,IAAA,GAAA,IAAA;AAJZ,IAAA,IAAA,CAAQ,EAAA,GAAK,CAAA;AAOT,IAAA,IAAI,CAAC,GAAA,CAAI,MAAA,EAAQ,MAAM,IAAI,aAAa,yBAAyB,CAAA;AACjE,IAAA,IAAI,CAAC,GAAA,CAAI,SAAA,EAAW,MAAM,IAAI,aAAa,6BAA6B,CAAA;AAExE,IAAA,IAAA,CAAK,QAAQ,OAAA,CAAQ,IAAA,CAAK,KAAK,IAAA,CAAK,IAAA,CAAK,CAAC,CAAA,EAAG;AAAA,MACzC,CAAA,EAAG,KAAK,GAAA;AAAI,KACf,CAAA;AACD,IAAA,IAAA,CAAK,aAAa,EAAC;AACnB,IAAA,IAAA,CAAK,WAAA,GAAc,CAAA;AAEnB,IAAA,KAAA,MAAW,KAAA,IAAS,GAAA,CAAI,QAAA,CAAS,QAAA,CAAS,OAAO,OAAA,EAAS;AACtD,MAAA,MAAM,EAAE,OAAO,GAAA,EAAI,GAAI,IAAI,QAAA,CAAS,QAAA,CAAS,MAAA,CAAO,OAAA,CAAQ,KAAK,CAAA;AACjE,MAAA,IAAA,CAAK,UAAA,CAAW,KAAK,CAAA,GAAI;AAAA,QACrB,KAAA,EAAO,CAAA;AAAA,QACP,KAAK,GAAA,IAAO,CAAA;AAAA,QACZ,OAAO,OAAO,KAAA,KAAU,QAAA,GAAW,CAAC,KAAK,CAAA,GAAI;AAAA,OACjD;AAAA,IACJ;AAEA,IAAA,IAAA,CAAK,MAAA,GAAS,GAAA,CAAI,MAAA,CAAO,mBAAA,CAAoB,sBAAsB,CAAA;AACnE,IAAA,IAAA,CAAK,YAAY,GAAA,CAAI,SAAA;AAErB,IAAA,IAAA,CAAK,UAAA,GAAa,IAAI,OAAA,CAAQ,UAAA;AAE9B,IAAA,IAAA,CAAK,EAAA,GAAK,IAAA;AAEV,IAAA,IAAA,CAAK,sBAAsB,MAAM;AAAA,IAAC,CAAA;AAClC,IAAA,IAAA,CAAK,mBAAmB,MAAM;AAAA,IAAC,CAAA;AAC/B,IAAA,IAAA,CAAK,kBAAkB,MAAM;AAAA,IAAC,CAAA;AAC9B,IAAA,IAAA,CAAK,oBAAoB,MAAM;AAAA,IAAC,CAAA;AAAA,EACpC;AAAA;AAAA;AAAA;AAAA,EAKO,YAAY,EAAA,EAAmB;AAClC,IAAA,IAAA,CAAK,mBAAA,GAAsB,EAAA;AAAA,EAC/B;AAAA;AAAA;AAAA;AAAA,EAKO,SAAS,EAAA,EAAsB;AAClC,IAAA,IAAA,CAAK,gBAAA,GAAmB,EAAA;AAAA,EAC5B;AAAA;AAAA;AAAA;AAAA,EAKO,QAAQ,EAAA,EAAqB;AAChC,IAAA,IAAA,CAAK,eAAA,GAAkB,EAAA;AAAA,EAC3B;AAAA;AAAA;AAAA;AAAA,EAKO,UAAU,EAAA,EAAuB;AACpC,IAAA,IAAA,CAAK,iBAAA,GAAoB,EAAA;AAAA,EAC7B;AAAA,EAEQ,SAAS,IAAA,EAAmB;AAChC,IAAA,IAAI,CAAC,IAAA,CAAK,GAAA,CAAI,QAAA,CAAS,QAAA,CAAS,OAAO,qBAAA,CAAsB,QAAA,CAAS,IAAI,CAAA,EAAG,OAAO,KAAA;AACpF,IAAA,IAAI,IAAA,CAAK,UAAA,CAAW,IAAA,CAAK,QAAA,EAAU,CAAA,CAAE,KAAA,IAAS,IAAA,CAAK,UAAA,CAAW,IAAA,CAAK,QAAA,EAAU,CAAA,CAAE,KAAK,OAAO,KAAA;AAC3F,IAAA,IAAA,CAAK,UAAA,CAAW,IAAA,CAAK,QAAA,EAAU,CAAA,CAAE,KAAA,EAAA;AAEjC,IAAA,MAAM,EAAE,OAAO,GAAA,EAAK,KAAA,KAAU,IAAA,CAAK,UAAA,CAAW,IAAA,CAAK,QAAA,EAAU,CAAA;AAC7D,IAAA,MAAM,SAAA,GAAY,KAAA,GAAQ,CAAA,GAAI,KAAA,CAAM,MAAA,GAAS,KAAA,CAAM,KAAA,GAAQ,CAAC,CAAA,GAAI,KAAA,CAAM,KAAA,CAAM,MAAA,GAAS,CAAC,CAAA;AACtF,IAAA,MAAA,CAAO,IAAA,CAAK,GAAG,CAAA,CAAE,OAAA,CAAQ,CAAA,eAAA,EAAkB,IAAI,CAAA,IAAA,EAAO,SAAS,CAAA,IAAA,EAAO,KAAK,CAAA,CAAA,EAAI,GAAG,CAAA,CAAA,CAAG,CAAA;AAErF,IAAA,OAAO,SAAA;AAAA,EACX;AAAA,EAEQ,aAAa,IAAA,EAAmB;AACpC,IAAA,IAAI,CAAC,IAAA,CAAK,GAAA,CAAI,QAAA,CAAS,QAAA,CAAS,OAAO,kBAAA,CAAmB,QAAA,CAAS,IAAI,CAAA,EAAG,OAAO,KAAA;AACjF,IAAA,IAAI,KAAK,WAAA,IAAe,IAAA,CAAK,IAAA,CAAK,MAAA,GAAS,GAAG,OAAO,KAAA;AAErD,IAAA,OAAO,IAAA;AAAA,EACX;AAAA,EAEQ,cAAA,GAAiB;AACrB,IAAA,IAAA,CAAK,WAAA,EAAA;AACL,IAAA,IAAA,CAAK,KAAA,GAAQ,QAAQ,IAAA,CAAK,GAAA,EAAK,KAAK,IAAA,CAAK,IAAA,CAAK,WAAW,CAAA,EAAG;AAAA,MACxD,CAAA,EAAG,KAAK,GAAA;AAAI,KACf,CAAA;AACD,IAAA,MAAA,CAAO,KAAK,GAAG,CAAA,CAAE,QAAQ,CAAA,qBAAA,EAAwB,IAAA,CAAK,KAAK,CAAA,CAAE,CAAA;AAAA,EACjE;AAAA,EAEO,MAAM,EAAE,YAAA,GAAe,KAAA,EAAM,GAAgC,EAAC,EAAG;AACpE,IAAA,IAAI,IAAA,CAAK,EAAA,EAAI,MAAM,IAAI,aAAa,iBAAiB,CAAA;AAErD,IAAA,MAAM,EAAA,GAAK,IAAI,SAAA,CAAU,IAAA,CAAK,KAAA,EAAO;AAAA,MACjC,OAAA,EAAS;AAAA,QACL,iBAAA,EAAmB,yBAAA;AAAA,QACnB,iBAAA,EAAmB,gBAAA;AAAA,QACnB,eAAA,EAAiB,UAAA;AAAA,QACjB,UAAA,EAAY,SAAA;AAAA,QACZ,IAAA,EAAM,IAAI,GAAA,CAAI,IAAA,CAAK,KAAK,CAAA,CAAE,IAAA;AAAA,QAC1B,MAAA,EAAQ,sBAAA;AAAA,QACR,MAAA,EAAQ,UAAA;AAAA,QACR,0BAAA,EAA4B,4CAAA;AAAA,QAC5B,uBAAA,EAAyB,IAAA;AAAA,QACzB,OAAA,EAAS,WAAA;AAAA,QACT,cAAc,IAAA,CAAK,SAAA;AAAA,QACnB,QAAQ,IAAA,CAAK;AAAA,OACjB;AAAA,MACA,KAAA,EAAO,IAAA,CAAK,GAAA,CAAI,OAAA,CAAQ;AAAA,KAC3B,CAAA;AACD,IAAA,IAAA,CAAK,EAAA,GAAK,EAAA;AAEV,IAAA,EAAA,CAAG,SAAS,MAAM;AACd,MAAA,IAAA,CAAK,mBAAA,EAAoB;AACzB,MAAA,IAAA,CAAK,KAAK,WAAW,CAAA;AAAA,IACzB,CAAA;AAEA,IAAA,EAAA,CAAG,OAAA,GAAU,CAAC,KAAA,KAAU;AACpB,MAAA,IAAA,CAAK,KAAA,EAAM;AACX,MAAA,IAAA,CAAK,IAAA,CAAK,cAAA,EAAgB,KAAA,CAAM,IAAA,EAAqB,MAAM,MAAM,CAAA;AACjE,MAAA,MAAM,KAAA,GAAQ,YAAA,IAAgB,IAAA,CAAK,QAAA,CAAS,MAAM,IAAmB,CAAA;AACrE,MAAA,IAAI,SAAS,YAAA,EAAc;AACvB,QAAA,MAAM,YAAA,GAAe,IAAA,CAAK,YAAA,CAAa,KAAA,CAAM,IAAmB,CAAA;AAChE,QAAA,IAAI,YAAA,EAAc;AACd,UAAA,IAAA,CAAK,cAAA,EAAe;AAAA,QACxB;AACA,QAAA,UAAA,CAAW,MAAM;AACb,UAAA,IAAA,CAAK,KAAA,CAAM,EAAE,YAAA,EAAc,IAAA,EAAM,CAAA;AAAA,QACrC,GAAG,KAAK,CAAA;AAAA,MACZ,CAAA,MAAO;AACH,QAAA,IAAA,CAAK,gBAAA,CAAiB,KAAA,CAAM,IAAA,EAAM,KAAA,CAAM,MAAM,CAAA;AAC9C,QAAA,IAAA,CAAK,IAAA,CAAK,QAAA,EAAU,KAAA,CAAM,IAAA,EAAqB,MAAM,MAAM,CAAA;AAAA,MAC/D;AAAA,IACJ,CAAA;AAEA,IAAA,EAAA,CAAG,OAAA,GAAU,CAAC,KAAA,KAAU;AACpB,MAAA,IAAA,CAAK,gBAAgB,KAAK,CAAA;AAC1B,MAAA,IAAA,CAAK,IAAA,CAAK,SAAS,KAAK,CAAA;AAAA,IAC5B,CAAA;AAEA,IAAA,EAAA,CAAG,SAAA,GAAY,OAAO,KAAA,KAAU;AAC5B,MAAA,MAAM,EAAE,MAAK,GAAI,KAAA;AACjB,MAAA,IAAI,EAAE,gBAAgB,MAAA,CAAA,EAAS;AAE/B,MAAA,MAAM,aAAA,GAAgB,IAAA,CAAK,QAAA,CAAS,CAAA,EAAG,CAAC,CAAA;AACxC,MAAA,MAAM,CAAC,OAAA,EAAS,GAAA,EAAK,MAAM,CAAA,GAAI,UAAU,aAAa,CAAA;AAEtD,MAAA,IAAI;AACA,QAAA,MAAM,YAAA,GAAe,IAAA,CAAK,QAAA,CAAS,CAAC,CAAA;AACpC,QAAA,MAAM,cAAc,IAAI,WAAA,CAAY,OAAO,CAAA,CAAE,OAAO,YAAY,CAAA;AAChE,QAAA,IAAI,WAAA,CAAY,UAAU,CAAA,EAAG;AAE7B,QAAA,MAAM,MAAA,GAAS,IAAA,CAAK,KAAA,CAAM,WAAW,CAAA;AAErC,QAAA,IAAI,OAAA,IAAW,KAAK,GAAA,IAAO,CAAA,IAAK,UAAU,CAAA,IAAK,MAAA,CAAO,MAAA,EAAQ,KAAK,CAAA,EAAG;AAClE,UAAA,IAAA,CAAK,YAAY,MAAA,CAAO,GAAA;AACxB,UAAA,IAAA,CAAK,IAAA,CAAK,YAAA,EAAc,MAAA,CAAO,GAAG,CAAA;AAElC,UAAA,IAAI,IAAA,CAAK,YAAA,EAAc,aAAA,CAAc,IAAA,CAAK,YAAY,CAAA;AAEtD,UAAA,MAAM,OAAO,MAAM;AACf,YAAA,MAAM,OAAA,GAAU;AAAA,cACZ,OAAA,EAAS,CAAA;AAAA,cACT,GAAA,EAAK,CAAA;AAAA,cACL,MAAA,EAAQ,CAAA;AAAA,cACR,IAAA,EAAM,EAAE,OAAA,EAAS,IAAA,CAAK,KAAI;AAAE,aAChC;AACA,YAAA,IAAA,CAAK,MAAA,CAAO,SAAS,KAAK,CAAA;AAAA,UAC9B,CAAA;AAEA,UAAA,IAAA,CAAK,YAAA,GAAe,YAAY,MAAM;AAClC,YAAA,IAAA,EAAK;AAAA,UACT,GAAG,IAAA,CAAK,GAAA,CAAI,QAAA,CAAS,QAAA,CAAS,OAAO,aAAa,CAAA;AAAA,QACtD;AAEA,QAAA,IAAI,OAAA,IAAW,CAAA,IAAK,GAAA,IAAO,GAAA,IAAO,UAAU,CAAA,EAAG;AAC3C,UAAA,MAAM,cAAc,MAAM,eAAA,CAAgB,MAAA,EAAQ,IAAA,CAAK,SAAS,CAAA,EAAG,IAAA;AACnE,UAAA,MAAM,EAAE,MAAK,GAAI,UAAA;AACjB,UAAA,KAAA,MAAW,OAAO,IAAA,EAAM;AACpB,YAAA,IAAI,OAAO,IAAI,OAAA,IAAW,QAAA,IAAY,OAAO,GAAA,CAAI,OAAA,EAAS,WAAW,CAAA,EAAG;AACpE,cAAA,MAAM,aAAa,IAAI,IAAA,CAAK,KAAK,GAAA,CAAI,GAAA,EAAK,KAAK,KAAK,CAAA;AACpD,cAAA,IAAI,UAAA,CAAW,MAAA,IAAU,CAAC,IAAA,CAAK,UAAA,EAAY;AAC3C,cAAA,IAAA,CAAK,IAAA,CAAK,QAAQ,UAAU,CAAA;AAAA,YAChC,CAAA,MAAO;AACH,cAAA,MAAM,gBAAgB,IAAI,WAAA,CAAY,IAAA,CAAK,GAAA,CAAI,KAAK,GAAG,CAAA;AACvD,cAAA,IAAI,aAAA,CAAc,MAAA,IAAU,CAAC,IAAA,CAAK,UAAA,EAAY;AAC9C,cAAA,IAAA,CAAK,kBAAkB,aAAa,CAAA;AACpC,cAAA,IAAA,CAAK,IAAA,CAAK,WAAW,aAAa,CAAA;AAAA,YACtC;AAAA,UACJ;AAAA,QACJ;AAEA,QAAA,IAAI,OAAA,IAAW,CAAA,IAAK,GAAA,IAAO,GAAA,IAAO,UAAU,CAAA,EAAG;AAC3C,UAAA,MAAM,cAAc,MAAM,eAAA,CAAgB,MAAA,EAAQ,IAAA,CAAK,SAAS,CAAA,EAAG,IAAA;AACnE,UAAA,MAAM,EAAE,WAAU,GAAI,UAAA;AACtB,UAAA,KAAA,MAAW,OAAO,SAAA,EAAW;AACzB,YAAA,IAAI,OAAO,IAAI,OAAA,IAAW,QAAA,IAAY,OAAO,GAAA,CAAI,OAAA,EAAS,WAAW,CAAA,EAAG;AACpE,cAAA,MAAM,aAAa,IAAI,IAAA,CAAK,KAAK,GAAA,CAAI,GAAA,EAAK,KAAK,IAAI,CAAA;AACnD,cAAA,IAAI,UAAA,CAAW,MAAA,IAAU,CAAC,IAAA,CAAK,UAAA,EAAY;AAC3C,cAAA,IAAA,CAAK,IAAA,CAAK,QAAQ,UAAU,CAAA;AAAA,YAChC,CAAA,MAAO;AACH,cAAA,MAAM,gBAAgB,IAAI,YAAA,CAAa,IAAA,CAAK,GAAA,CAAI,KAAK,GAAG,CAAA;AACxD,cAAA,IAAI,aAAA,CAAc,MAAA,IAAU,CAAC,IAAA,CAAK,UAAA,EAAY;AAC9C,cAAA,IAAA,CAAK,kBAAkB,aAAa,CAAA;AACpC,cAAA,IAAA,CAAK,IAAA,CAAK,WAAW,aAAa,CAAA;AAAA,YACtC;AAAA,UACJ;AAAA,QACJ;AAEA,QAAA,IAAI,OAAA,IAAW,CAAA,IAAK,GAAA,IAAO,GAAA,IAAO,UAAU,CAAA,EAAG;AAC3C,UAAA,MAAM,cAAc,MAAM,eAAA,CAAgB,MAAA,EAAQ,IAAA,CAAK,SAAS,CAAA,EAAG,IAAA;AACnE,UAAA,MAAM,EAAE,UAAS,GAAI,UAAA;AACrB,UAAA,KAAA,MAAW,WAAW,QAAA,EAAU;AAC5B,YAAA,IAAI,OAAA,CAAQ,OAAA,CAAQ,QAAA,IAAY,WAAA,EAAa;AACzC,cAAA,MAAMC,KAAAA,GAAO;AAAA,gBACT,OAAA,EAAS,OAAA,CAAQ,OAAA,CAAQ,IAAA,CAAK,GAAA;AAAA,gBAC9B,MAAA,EAAQ,QAAQ,OAAA,CAAQ;AAAA,eAC5B;AAEA,cAAA,MAAM,cAAA,GAAiB,KAAK,GAAA,CAAI,eAAA,CAAgB,IAAI,MAAA,CAAO,OAAA,CAAQ,OAAA,CAAQ,MAAM,CAAC,CAAA;AAClF,cAAA,IAAI,cAAA,iBAA+BA,KAAI,CAAA;AACvC,cAAA,IAAA,CAAK,IAAI,eAAA,CAAgB,MAAA,CAAO,OAAO,OAAA,CAAQ,OAAA,CAAQ,MAAM,CAAC,CAAA;AAE9D,cAAA,IAAA,CAAK,IAAA,CAAK,qBAAqBA,KAAI,CAAA;AAAA,YACvC,CAAA,MAAA,IAAW,OAAA,CAAQ,OAAA,CAAQ,QAAA,IAAY,OAAA,EAAS;AAK5C,cAAA,IAAI,OAAA,CAAQ,OAAA,CAAQ,GAAA,IAAO,aAAA,EAAe;AAE1C,cAAA,MAAM,cAAA,GACF,OAAO,OAAA,CAAQ,OAAA,CAAQ,IAAA,IAAQ,QAAA,GACzB,IAAA,CAAK,KAAA,CAAM,OAAA,CAAQ,OAAA,CAAQ,IAAI,CAAA,GAC/B,QAAQ,OAAA,CAAQ,IAAA;AAE1B,cAAA,MAAM,UAAA,GAAa,oBAAA;AAAA,gBACf,KAAK,GAAA,CAAI,GAAA;AAAA,gBACT,cAAA;AAAA,gBACA,iBAAA,CAAkB,OAAA,CAAQ,OAAA,CAAQ,GAAG,CAAA;AAAA,gBACrC,QAAQ,OAAA,CAAQ;AAAA,eACpB;AACA,cAAA,IAAI,UAAA,CAAW,MAAA,IAAU,CAAC,IAAA,CAAK,UAAA,EAAY;AAC3C,cAAA,IAAA,CAAK,IAAA,CAAK,eAAe,UAAU,CAAA;AAAA,YACvC,CAAA,MAAA,IAAW,OAAA,CAAQ,OAAA,CAAQ,QAAA,IAAY,IAAA,EAAM;AAKzC,cAAA,IAAI,OAAA,CAAQ,OAAA,CAAQ,GAAA,IAAO,KAAA,EAAO;AAElC,cAAA,MAAM,eAAA,GACF,OAAO,OAAA,CAAQ,OAAA,CAAQ,IAAA,IAAQ,QAAA,GACzB,IAAA,CAAK,KAAA,CAAM,OAAA,CAAQ,OAAA,CAAQ,IAAI,CAAA,GAC/B,QAAQ,OAAA,CAAQ,IAAA;AAG1B,cAAA,IACI,OAAO,eAAA,IAAmB,QAAA,IAC1B,OAAA,IAAW,eAAA,IACX,OAAO,eAAA,CAAgB,KAAA,IAAS,QAAA,IAChC,QAAA,IAAY,eAAA,CAAgB,KAAA,EAC9B;AACE,gBAAA,eAAA,CAAgB,KAAA,CAAM,SAAS,IAAA,CAAK,KAAA,CAAM,GAAG,eAAA,CAAgB,KAAA,CAAM,MAAM,CAAA,CAAE,CAAA;AAAA,cAC/E;AAEA,cAAA,MAAM,WAAA,GAAc,qBAAA;AAAA,gBAChB,KAAK,GAAA,CAAI,GAAA;AAAA,gBACT,OAAO,eAAA,IAAmB,QAAA,GAAW,OAAA,CAAQ,QAAQ,IAAA,GAAO,eAAA;AAAA,gBAC5D,kBAAA,CAAmB,OAAA,CAAQ,OAAA,CAAQ,GAAG;AAAA,eAC1C;AACA,cAAA,IAAI,WAAA,CAAY,MAAA,IAAU,CAAC,IAAA,CAAK,UAAA,EAAY;AAC5C,cAAA,IAAA,CAAK,IAAA,CAAK,gBAAgB,WAAW,CAAA;AAAA,YACzC;AAAA,UACJ;AAAA,QACJ;AAEA,QAAA,IAAI,OAAO,GAAA,EAAK;AACZ,UAAA,MAAM,cAAc,MAAM,eAAA,CAAgB,MAAA,EAAQ,IAAA,CAAK,SAAS,CAAA,EAAG,IAAA;AACnE,UAAA,MAAM,EAAE,MAAA,EAAQ,WAAA,EAAY,GAAI,UAAA;AAEhC,UAAA,KAAA,MAAW,SAAS,MAAA,EAAQ;AACxB,YAAA,KAAA,CAAM,OAAA,GAAU,IAAA,CAAK,KAAA,CAAM,KAAA,CAAM,OAAO,CAAA;AACxC,YAAA,MAAM,iBAAiB,IAAI,QAAA,CAAS,KAAK,GAAA,CAAI,GAAA,EAAK,OAAO,KAAK,CAAA;AAC9D,YAAA,IAAI,cAAA,CAAe,MAAA,IAAU,CAAC,IAAA,CAAK,UAAA,EAAY;AAE/C,YAAA,IAAA,CAAK,IAAA,CAAK,YAAY,cAAc,CAAA;AAAA,UACxC;AAEA,UAAA,KAAA,MAAW,cAAc,WAAA,EAAa;AAClC,YAAA,UAAA,CAAW,OAAA,GAAU,IAAA,CAAK,KAAA,CAAM,UAAA,CAAW,OAAO,CAAA;AAClD,YAAA,MAAM,iBAAiB,IAAI,QAAA,CAAS,KAAK,GAAA,CAAI,GAAA,EAAK,YAAY,IAAI,CAAA;AAClE,YAAA,IAAI,cAAA,CAAe,MAAA,IAAU,CAAC,IAAA,CAAK,UAAA,EAAY;AAE/C,YAAA,IAAA,CAAK,IAAA,CAAK,YAAY,cAAc,CAAA;AAAA,UACxC;AAAA,QACJ;AAEA,QAAA,IAAI,GAAA,IAAO,GAAA,IAAO,GAAA,IAAO,GAAA,EAAK;AAC1B,UAAA,MAAM,cAAc,MAAM,eAAA,CAAgB,MAAA,EAAQ,IAAA,CAAK,SAAS,CAAA,EAAG,IAAA;AACnE,UAAA,MAAM,UAAU,GAAA,IAAO,GAAA;AAEvB,UAAA,MAAM,MAAA,GAAS,UAAA,CAAW,OAAA,GAAU,aAAA,GAAgB,QAAQ,CAAA;AAC5D,UAAA,MAAM,eAAA,GAAkB,MAAA,CAAO,GAAA,CAAI,CAAC,KAAA,KAAU,IAAI,QAAA,CAAS,IAAA,CAAK,GAAA,CAAI,GAAA,EAAK,KAAA,EAAO,OAAO,CAAC,CAAA;AAExF,UAAA,IAAA,CAAK,IAAA,CAAK,eAAA,EAAiB,eAAA,EAAiB,OAAO,CAAA;AAAA,QACvD;AAEA,QAAA,IAAI,GAAA,IAAO,GAAA,IAAO,MAAA,IAAU,CAAA,EAAG;AAC3B,UAAA,MAAM,cAAc,MAAM,eAAA,CAAgB,MAAA,EAAQ,IAAA,CAAK,SAAS,CAAA,EAAG,IAAA;AACnE,UAAA,MAAM,OAAO,UAAA,CAAW,IAAA;AACxB,UAAA,MAAM,YAAA,GAAe,IAAA,CAAK,GAAA,CAAI,CAAC,GAAA,KAAQ,IAAI,WAAA,CAAY,IAAA,CAAK,GAAA,CAAI,GAAA,EAAK,GAAG,CAAC,CAAA;AACzE,UAAA,IAAA,CAAK,IAAA,CAAK,gBAAgB,YAAA,EAAA,CAAA,YAA6B;AAAA,QAC3D;AAEA,QAAA,IAAI,GAAA,IAAO,GAAA,IAAO,MAAA,IAAU,CAAA,EAAG;AAC3B,UAAA,MAAM,cAAc,MAAM,eAAA,CAAgB,MAAA,EAAQ,IAAA,CAAK,SAAS,CAAA,EAAG,IAAA;AACnE,UAAA,MAAM,YAAY,UAAA,CAAW,SAAA;AAC7B,UAAA,MAAM,YAAA,GAAe,SAAA,CAAU,GAAA,CAAI,CAAC,GAAA,KAAQ,IAAI,YAAA,CAAa,IAAA,CAAK,GAAA,CAAI,GAAA,EAAK,GAAG,CAAC,CAAA;AAC/E,UAAA,IAAA,CAAK,IAAA,CAAK,gBAAgB,YAAA,EAAA,CAAA,aAA8B;AAAA,QAC5D;AAEA,QAAA,IAAI,GAAA,IAAO,GAAA,IAAO,MAAA,IAAU,CAAA,EAAG;AAC3B,UAAA,MAAM,cAAc,MAAM,eAAA,CAAgB,MAAA,EAAQ,IAAA,CAAK,SAAS,CAAA,EAAG,IAAA;AACnE,UAAA,MAAM,EAAE,SAAQ,GAAI,UAAA;AAEpB,UAAA,KAAA,MAAW,UAAU,OAAA,EAAS;AAC1B,YAAA,MAAMA,QAAO,IAAA,CAAK,KAAA,CAAM,CAAA,CAAA,EAAI,MAAA,CAAO,IAAI,CAAA,CAAA,CAAG,CAAA;AAC1C,YAAA,IAAI,MAAA,CAAO,YAAY,QAAA,EAAU;AAC7B,cAAA,IAAI,MAAA,CAAO,OAAO,QAAA,EAAU;AACxB,gBAAA,MAAM,YAAA,GAAe,IAAI,UAAA,CAAWA,KAAI,CAAA;AACxC,gBAAA,IAAA,CAAK,IAAA,CAAK,UAAU,YAAY,CAAA;AAAA,cACpC,CAAA,MAAA,IAAW,MAAA,CAAO,GAAA,IAAO,SAAA,EAAW;AAIhC,gBAAA,MAAM,YAAA,GAAe,IAAI,WAAA,CAAYA,KAAI,CAAA;AACzC,gBAAA,IAAA,CAAK,IAAA,CAAK,UAAU,YAAY,CAAA;AAAA,cACpC;AAAA,YACJ;AAAA,UACJ;AAAA,QACJ;AAEA,QAAA,IAAI,GAAA,IAAO,GAAA,IAAO,MAAA,IAAU,CAAA,EAAG;AAC3B,UAAA,MAAM,cAAc,MAAM,eAAA,CAAgB,MAAA,EAAQ,IAAA,CAAK,SAAS,CAAA,EAAG,IAAA;AACnE,UAAA,MAAM,EAAE,UAAA,EAAY,aAAA,EAAe,KAAA,EAAO,UAAS,GAAI,UAAA;AAEvD,UAAA,IAAI,MAAM,OAAA,CAAQ,aAAa,CAAA,IAAK,aAAA,CAAc,SAAS,CAAA,EAAG;AAC1D,YAAA,MAAM,gBAAA,GAAmB,cAAc,GAAA,CAAI,CAAC,cAAc,IAAI,oBAAA,CAAqB,SAAS,CAAC,CAAA;AAC7F,YAAA,IAAA,CAAK,IAAA,CAAK,sBAAsB,gBAAgB,CAAA;AAAA,UACpD;AAEA,UAAA,IAAI,MAAM,OAAA,CAAQ,QAAQ,CAAA,IAAK,QAAA,CAAS,SAAS,CAAA,EAAG;AAChD,YAAA,MAAM,WAAA,GAAc,SAAS,GAAA,CAAI,CAAC,SAAS,IAAI,eAAA,CAAgB,IAAI,CAAC,CAAA;AACpE,YAAA,IAAA,CAAK,IAAA,CAAK,iBAAiB,WAAW,CAAA;AAAA,UAC1C;AAAA,QACJ;AAEA,QAAA,IAAI,GAAA,IAAO,GAAA,IAAO,MAAA,IAAU,CAAA,EAAG;AAC3B,UAAA,MAAM,cAAc,MAAM,eAAA,CAAgB,MAAA,EAAQ,IAAA,CAAK,SAAS,CAAA,EAAG,IAAA;AACnE,UAAA,MAAM,EAAE,UAAA,EAAY,aAAA,EAAe,UAAA,EAAY,eAAc,GAAI,UAAA;AAEjE,UAAA,IAAI,MAAM,OAAA,CAAQ,aAAa,CAAA,IAAK,aAAA,CAAc,SAAS,CAAA,EAAG;AAC1D,YAAA,IAAI,mBAAmB,aAAA,CAAc,GAAA;AAAA,cACjC,CAAC,SAAA,KAAc,IAAI,sBAAsB,IAAA,CAAK,GAAA,CAAI,KAAK,SAAS;AAAA,aACpE;AACA,YAAA,IAAI,CAAC,IAAA,CAAK,UAAA;AACN,cAAA,gBAAA,GAAmB,iBAAiB,MAAA,CAAO,CAAC,SAAA,KAAc,CAAC,UAAU,MAAM,CAAA;AAC/E,YAAA,IAAA,CAAK,IAAA,CAAK,sBAAsB,gBAAgB,CAAA;AAAA,UACpD;AAEA,UAAA,IAAI,MAAM,OAAA,CAAQ,aAAa,CAAA,IAAK,aAAA,CAAc,SAAS,CAAA,EAAG;AAC1D,YAAA,IAAI,WAAA,GAAc,aAAA,CAAc,GAAA,CAAI,CAAC,IAAA,KAAS,IAAI,gBAAA,CAAiB,IAAA,CAAK,GAAA,CAAI,GAAA,EAAK,IAAI,CAAC,CAAA;AACtF,YAAA,IAAI,CAAC,IAAA,CAAK,UAAA,EAAY,WAAA,GAAc,WAAA,CAAY,OAAO,CAAC,IAAA,KAAS,CAAC,IAAA,CAAK,MAAM,CAAA;AAC7E,YAAA,IAAA,CAAK,IAAA,CAAK,iBAAiB,WAAW,CAAA;AAAA,UAC1C;AAAA,QACJ;AAEA,QAAA,IAAI,OAAA,IAAW,CAAA,IAAK,GAAA,IAAO,GAAA,IAAQ,UAAU,CAAA,EAAG;AAC5C,UAAA,MAAA,CAAO,IAAA,CAAK,GAAG,CAAA,CAAE,KAAA,EAAM;AACvB,UAAA,MAAA,CAAO,IAAA,CAAK,GAAG,CAAA,CAAE,KAAA,CAAM,gDAAgD,CAAA;AACvE,UAAA,MAAA,CAAO,IAAA,CAAK,GAAG,CAAA,CAAE,KAAA,EAAM;AACvB,UAAA,IAAI,GAAG,UAAA,KAAe,SAAA,CAAU,MAAA,EAAQ,EAAA,CAAG,MAAM,GAAA,2BAA+B;AAAA,QACpF;AAAA,MACJ,SAAS,KAAA,EAAO;AACZ,QAAA,IAAA,CAAK,gBAAgB,KAAK,CAAA;AAC1B,QAAA,IAAA,CAAK,IAAA,CAAK,SAAS,KAAK,CAAA;AAAA,MAC5B;AAAA,IACJ,CAAA;AAAA,EACJ;AAAA,EAEO,IAAA,GAAO;AACV,IAAA,IAAI,KAAK,EAAA,EAAI;AACT,MAAA,IAAA,CAAK,EAAA,CAAG,MAAM,GAAA,qBAAyB;AACvC,MAAA,IAAA,CAAK,KAAA,EAAM;AAAA,IACf;AAAA,EACJ;AAAA,EAEO,MAAA,CAAO,OAAA,EAAoB,SAAA,GAAqB,IAAA,EAAM;AACzD,IAAA,IAAI,KAAK,EAAA,EAAI;AACT,MAAA,IAAI,WAAW,OAAA,CAAQ,IAAA,CAAK,QAAQ,CAAA,GAAI,CAAA,IAAA,EAAO,KAAK,EAAA,EAAI,CAAA,CAAA;AAExD,MAAA,MAAM,WAAA,GAAc,IAAI,WAAA,EAAY,CAAE,OAAO,IAAA,CAAK,SAAA,CAAU,OAAA,CAAQ,IAAI,CAAC,CAAA;AACzE,MAAA,MAAM,aAAa,WAAA,CAAY,MAAA;AAE/B,MAAA,MAAM,IAAA,GAAO,IAAI,QAAA,CAAS,MAAA,CAAO,MAAM,CAAA,GAAI,UAAU,EAAE,MAAM,CAAA;AAC7D,MAAA,IAAA,CAAK,QAAA,CAAS,CAAA,EAAG,OAAA,CAAQ,OAAO,CAAA;AAChC,MAAA,IAAA,CAAK,QAAA,CAAS,CAAA,EAAG,OAAA,CAAQ,GAAA,EAAK,IAAI,CAAA;AAClC,MAAA,IAAA,CAAK,OAAA,CAAQ,CAAA,EAAG,OAAA,CAAQ,MAAM,CAAA;AAE9B,MAAA,WAAA,CAAY,OAAA,CAAQ,CAAC,CAAA,EAAG,CAAA,KAAM;AAC1B,QAAA,IAAA,CAAK,QAAA,CAAS,CAAA,GAAI,CAAA,EAAG,CAAC,CAAA;AAAA,MAC1B,CAAC,CAAA;AAED,MAAA,IAAA,CAAK,EAAA,CAAG,KAAK,IAAI,CAAA;AAAA,IACrB;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOO,kBAAA,CAAmB,UAAA,EAAwB,SAAA,GAA2B,IAAA,EAAM;AAC/E,IAAA,MAAM,OAAA,GAAU;AAAA,MACZ,OAAA,EAAS,CAAA;AAAA,MACT,GAAA,EAAK,8BAAiC,GAAA,GAAM,GAAA;AAAA,MAC5C,MAAA,EAAQ,CAAA;AAAA,MACR,IAAA,EAAM,EAAE,KAAA,EAAO,IAAA,EAAM,QAAQ,SAAA,EAAW,MAAA,EAAQ,EAAC;AAAE,KACvD;AACA,IAAA,IAAA,CAAK,OAAO,OAAO,CAAA;AAAA,EACvB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOO,mBAAA,CAAoB,UAAA,EAAwB,SAAA,GAA2B,IAAA,EAAM;AAChF,IAAA,MAAM,OAAA,GAAU;AAAA,MACZ,OAAA,EAAS,CAAA;AAAA,MACT,GAAA,EAAK,8BAAiC,GAAA,GAAM,GAAA;AAAA,MAC5C,MAAA,EAAQ,CAAA;AAAA,MACR,IAAA,EAAM,EAAE,KAAA,EAAO,IAAA,EAAM,QAAQ,SAAA,EAAW,MAAA,EAAQ,EAAC;AAAE,KACvD;AACA,IAAA,IAAA,CAAK,OAAO,OAAO,CAAA;AAAA,EACvB;AAAA,EAEQ,KAAA,GAAQ;AACZ,IAAA,IAAA,CAAK,EAAA,GAAK,IAAA;AACV,IAAA,IAAA,CAAK,SAAA,GAAY,MAAA;AACjB,IAAA,IAAI,IAAA,CAAK,YAAA,EAAc,aAAA,CAAc,IAAA,CAAK,YAAY,CAAA;AAAA,EAC1D;AACJ,CAAA;AAEA,SAAS,UAAU,MAAA,EAAgB;AAC/B,EAAA,IAAI,MAAA,CAAO,aAAa,CAAA,EAAG;AACvB,IAAA,MAAM,IAAI,aAAa,gBAAgB,CAAA;AAAA,EAC3C;AAEA,EAAA,OAAO,CAAC,MAAA,CAAO,CAAC,CAAA,EAAG,MAAA,CAAO,aAAa,CAAC,CAAA,EAAG,MAAA,CAAO,CAAC,CAAC,CAAA;AACxD;;;AC1hBO,IAAM,6BAA6B,UAAA,EAAwC,CAAE,CAAC,GAAA,EAAK,KAAK,KAAA,KAAU;AACrG,EAAA,MAAM,UAAA,GAAa,MAAM,OAAA,CAAQ,CAAA,EAAG,IAAI,aAAA,CAAc,MAAA,CAAO,CAAC,CAAC,CAAA,kBAAA,CAAoB,CAAA;AASnF,EAAA,OAAO,eAAe,oBAAoB,QAAA,EAAkB;AACxD,IAAA,MAAM,MAAA,GAAS;AAAA,MACX,GAAA,EAAK,QAAA;AAAA,MACL,UAAU,GAAA,CAAI;AAAA,KAClB;AAEA,IAAA,MAAM,kBAAkB,KAAA,CAAM,SAAA,CAAU,IAAA,CAAK,SAAA,CAAU,MAAM,CAAC,CAAA;AAC9D,IAAA,IAAI,CAAC,eAAA,EAAiB,MAAM,IAAI,aAAa,0BAA0B,CAAA;AAEvE,IAAA,MAAM,QAAA,GAAW,MAAM,KAAA,CAAM,OAAA,CAAQ,UAAA,EAAY;AAAA,MAC7C,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,IAAI,eAAA,CAAgB;AAAA,QACtB,MAAA,EAAQ;AAAA,OACX;AAAA,KACJ,CAAA;AAED,IAAA,OAAO,KAAA,CAAM,QAAQ,QAAQ,CAAA;AAAA,EACjC,CAAA;AACJ,CAAC,CAAA;AC3BM,IAAM,+BAA+B,UAAA,EAA0C,CAAE,CAAC,GAAA,EAAK,GAAG,KAAA,KAAU;AACvG,EAAA,MAAM,UAAA,GAAa,MAAM,OAAA,CAAQ,CAAA,EAAG,IAAI,aAAA,CAAc,KAAA,CAAM,CAAC,CAAC,CAAA,0BAAA,CAA4B,CAAA;AAU1F,EAAA,OAAO,eAAe,qBAAA,CAAsB,QAAA,EAA6B,OAAA,EAAiB;AACtF,IAAA,MAAM,SAAA,GAAYC,YAAU,QAAQ,CAAA;AAEpC,IAAA,MAAM,MAAA,GAAS;AAAA,MACX,IAAA,EAAM,OAAA;AAAA,MACN,OAAA,EAAS;AAAA,KACb;AAEA,IAAA,MAAM,kBAAkB,KAAA,CAAM,SAAA,CAAU,IAAA,CAAK,SAAA,CAAU,MAAM,CAAC,CAAA;AAC9D,IAAA,IAAI,CAAC,eAAA,EAAiB,MAAM,IAAI,aAAa,0BAA0B,CAAA;AAEvE,IAAA,MAAM,QAAA,GAAW,MAAM,KAAA,CAAM,OAAA,CAAQ,KAAA,CAAM,OAAA,CAAQ,UAAA,EAAY,EAAE,MAAA,EAAQ,eAAA,EAAiB,CAAA,EAAG;AAAA,MACzF,MAAA,EAAQ;AAAA,KACX,CAAA;AAED,IAAA,OAAO,KAAA,CAAM,QAAQ,QAAQ,CAAA;AAAA,EACjC,CAAA;AACJ,CAAC,CAAA;AC5BM,IAAM,wBAAwB,UAAA,EAAmC,CAAE,CAAC,GAAA,EAAK,KAAK,KAAA,KAAU;AAC3F,EAAA,MAAM,UAAA,GAAa,MAAM,OAAA,CAAQ,CAAA,EAAG,IAAI,aAAA,CAAc,KAAA,CAAM,CAAC,CAAC,CAAA,qBAAA,CAAuB,CAAA;AAWrF,EAAA,OAAO,eAAe,cAAA,CAAe,QAAA,EAA6B,OAAA,EAAiB;AAC/E,IAAA,MAAM,SAAA,GAAYA,YAAU,QAAQ,CAAA;AAEpC,IAAA,MAAM,MAAA,GAAS;AAAA,MACX,IAAA,EAAM,OAAA;AAAA,MACN,OAAA,EAAS,SAAA;AAAA,MACT,MAAM,GAAA,CAAI;AAAA,KACd;AAEA,IAAA,MAAM,kBAAkB,KAAA,CAAM,SAAA,CAAU,IAAA,CAAK,SAAA,CAAU,MAAM,CAAC,CAAA;AAC9D,IAAA,IAAI,CAAC,eAAA,EAAiB,MAAM,IAAI,aAAa,0BAA0B,CAAA;AAEvE,IAAA,MAAM,QAAA,GAAW,MAAM,KAAA,CAAM,OAAA,CAAQ,KAAA,CAAM,OAAA,CAAQ,UAAA,EAAY,EAAE,MAAA,EAAQ,eAAA,EAAiB,CAAA,EAAG;AAAA,MACzF,MAAA,EAAQ;AAAA,KACX,CAAA;AAED,IAAA,OAAO,KAAA,CAAM,QAAQ,QAAQ,CAAA;AAAA,EACjC,CAAA;AACJ,CAAC,CAAA;;;ACjBM,IAAM,wBAAwB,UAAA,EAAmC,CAAE,CAAC,GAAA,EAAK,MAAM,KAAA,KAAU;AAC5F,EAAA,MAAM,UAAA,GAAa,MAAM,OAAA,CAAQ,CAAA,EAAG,IAAI,aAAA,CAAc,KAAA,CAAM,CAAC,CAAC,CAAA,oBAAA,CAAsB,CAAA;AASpF,EAAA,OAAO,eAAe,eAAe,OAAA,EAAgC;AACjE,IAAA,MAAM,MAAA,GAAS;AAAA,MACX,SAAS,OAAA,CAAQ,MAAA;AAAA,MACjB,WAAA,EAAa,IAAA,CAAK,SAAA,CAAU,OAAA,CAAQ,OAAO,CAAA;AAAA,MAC3C,kBAAkB,OAAA,CAAQ;AAAA,KAC9B;AAEA,IAAA,MAAM,kBAAkB,KAAA,CAAM,SAAA,CAAU,IAAA,CAAK,SAAA,CAAU,MAAM,CAAC,CAAA;AAC9D,IAAA,IAAI,CAAC,eAAA,EAAiB,MAAM,IAAI,aAAa,0BAA0B,CAAA;AAEvE,IAAA,MAAM,QAAA,GAAW,MAAM,KAAA,CAAM,OAAA,CAAQ,KAAA,CAAM,OAAA,CAAQ,UAAA,EAAY,EAAE,MAAA,EAAQ,eAAA,EAAiB,CAAA,EAAG;AAAA,MACzF,MAAA,EAAQ;AAAA,KACX,CAAA;AAED,IAAA,OAAO,KAAA,CAAM,QAAQ,QAAQ,CAAA;AAAA,EACjC,CAAA;AACJ,CAAC,CAAA;;;AC9BM,IAAM,yBAAyB,UAAA,EAAoC,CAAE,CAAC,GAAA,EAAK,KAAK,KAAA,KAAU;AAC7F,EAAA,MAAM,UAAA,GAAa,MAAM,OAAA,CAAQ,CAAA,EAAG,IAAI,aAAA,CAAc,aAAA,CAAc,CAAC,CAAC,CAAA,wBAAA,CAA0B,CAAA;AAWhG,EAAA,OAAO,eAAe,gBAAgB,UAAA,EAAoC;AACtE,IAAA,MAAM,MAAA,GAAS,CAAC,UAAA,CAAW,KAAA,GAAQ,CAAA,GAAI,CAAA;AAEvC,IAAA,MAAM,MAAA,GAAkC;AAAA,MACpC,SAAS,UAAA,CAAW,OAAA;AAAA,MACpB,OAAA,EAAS;AAAA,QACL,OAAO,UAAA,CAAW,KAAA;AAAA,QAClB,MAAA,EAAQ;AAAA,OACZ;AAAA,MACA,IAAA,EAAM,MAAA;AAAA,MACN,MAAM,GAAA,CAAI;AAAA,KACd;AAEA,IAAA,IAAI,WAAW,CAAA,EAAG;AACd,MAAA,IAAI,CAAC,UAAA,CAAW,KAAA,EAAO,MAAM,IAAI,aAAa,mBAAmB,CAAA;AACjE,MAAA,MAAM,WAAA,GAAc,MAAM,GAAA,CAAI,kBAAA,CAAmB;AAAA,QAC7C,MAAM,UAAA,CAAW;AAAA,OACpB,CAAA;AAED,MAAA,MAAM,UAAU,WAAA,CAAY,OAAA;AAC5B,MAAA,MAAM,WAAW,WAAA,CAAY,QAAA;AAC7B,MAAA,MAAM,YAAY,WAAA,CAAY,SAAA;AAC9B,MAAA,MAAM,QAAQ,WAAA,CAAY,KAAA;AAE1B,MAAA,MAAA,CAAO,KAAA,GAAQ;AAAA,QACX,KAAA,EAAO;AAAA,UACH;AAAA,YACI,IAAA,EAAM,CAAA;AAAA,YACN,OAAA;AAAA,YACA,KAAA,EAAO,EAAA;AAAA,YACP,KAAA,EAAO,EAAA;AAAA,YACP,MAAA,EAAQ,EAAA;AAAA,YACR,YAAA,EAAc,QAAA;AAAA,YACd,QAAQ,SAAA,IAAa,KAAA;AAAA,YACrB,QAAA;AAAA,YACA,WAAW,SAAA,IAAa,KAAA;AAAA,YACxB,OAAO,KAAA,IAAS;AAAA;AACpB;AACJ,OACJ;AAAA,IACJ;AAEA,IAAA,MAAM,kBAAkB,KAAA,CAAM,SAAA,CAAU,IAAA,CAAK,SAAA,CAAU,MAAM,CAAC,CAAA;AAC9D,IAAA,IAAI,CAAC,eAAA,EAAiB,MAAM,IAAI,aAAa,0BAA0B,CAAA;AAEvE,IAAA,MAAM,QAAA,GAAW,MAAM,KAAA,CAAM,OAAA,CAAQ,KAAA,CAAM,OAAA,CAAQ,UAAA,EAAY,EAAE,MAAA,EAAQ,eAAA,EAAiB,CAAA,EAAG;AAAA,MACzF,MAAA,EAAQ;AAAA,KACX,CAAA;AAED,IAAA,OAAO,KAAA,CAAM,QAAQ,QAAQ,CAAA;AAAA,EACjC,CAAA;AACJ,CAAC,CAAA;;;ACvDM,IAAM,qBAAqB,UAAA,EAAgC,CAAE,CAAC,GAAA,EAAK,KAAK,KAAA,KAAU;AACrF,EAAA,MAAM,WAAA,GAAc;AAAA,IAChB,CAAA,CAAA,cAAmB,KAAA,CAAM,OAAA,CAAQ,CAAA,EAAG,IAAI,aAAA,CAAc,QAAA,CAAS,CAAC,CAAC,CAAA,qBAAA,CAAuB,CAAA;AAAA,IACxF,CAAA,CAAA,eAAoB,KAAA,CAAM,OAAA,CAAQ,CAAA,EAAG,IAAI,aAAA,CAAc,QAAA,CAAS,CAAC,CAAC,CAAA,mBAAA,CAAqB;AAAA,GAC3F;AAUA,EAAA,OAAO,eAAe,WAAA,CAAY,IAAA,EAAkC,IAAA,EAA8B;AAC9F,IAAA,MAAM,UAAA,GAAa,WAAA,CAAY,IAAA,CAAK,IAAI,CAAA;AACxC,IAAA,IAAI,KAAA,EAAO,MAAA;AAEX,IAAA,IAAI,OAAO,QAAQ,QAAA,EAAU;AACzB,MAAA,KAAA,GAAQ,IAAA,CAAK,KAAA;AACb,MAAA,MAAA,GAAS,IAAA,CAAK,MAAA;AAAA,IAClB,CAAA;AACI,MAAA,QAAQ,IAAA;AAAM,QACV,KAAA,IAAA;AACI,UAAA,KAAA,GAAQ,CAAA;AACR,UAAA,MAAA,GAAS,CAAA;AACT,UAAA;AAAA,QACJ,KAAA,UAAA;AACI,UAAA,KAAA,GAAQ,CAAA;AACR,UAAA,MAAA,GAAS,CAAA;AACT,UAAA;AAAA,QACJ,KAAA,SAAA;AACI,UAAA,KAAA,GAAQ,CAAA;AACR,UAAA,MAAA,GAAS,CAAA;AACT,UAAA;AAAA,QACJ,KAAA,IAAA;AACI,UAAA,KAAA,GAAQ,EAAA;AACR,UAAA,MAAA,GAAS,CAAA;AACT,UAAA;AAAA,QACJ,KAAA,MAAA;AACI,UAAA,KAAA,GAAQ,CAAA;AACR,UAAA,MAAA,GAAS,CAAA;AACT,UAAA;AAAA,QACJ,KAAA,KAAA;AACI,UAAA,KAAA,GAAQ,EAAA;AACR,UAAA,MAAA,GAAS,CAAA;AACT,UAAA;AAAA,QACJ,KAAA,KAAA;AACI,UAAA,KAAA,GAAQ,CAAA;AACR,UAAA,MAAA,GAAS,CAAA;AACT,UAAA;AAAA,QACJ,KAAA,KAAA;AACI,UAAA,KAAA,GAAQ,CAAA;AACR,UAAA,MAAA,GAAS,CAAA;AACT,UAAA;AAAA,QACJ,KAAA,QAAA;AACI,UAAA,KAAA,GAAQ,EAAA;AACR,UAAA,MAAA,GAAS,CAAA;AACT,UAAA;AAAA,QACJ,KAAA,QAAA;AACI,UAAA,KAAA,GAAQ,GAAA;AACR,UAAA,MAAA,GAAS,CAAA;AACT,UAAA;AAAA,QACJ,KAAA,SAAA;AACI,UAAA,KAAA,GAAQ,EAAA;AACR,UAAA,MAAA,GAAS,CAAA;AACT,UAAA;AAAA,QACJ,KAAA,QAAA;AACI,UAAA,KAAA,GAAQ,CAAA;AACR,UAAA,MAAA,GAAS,CAAA;AACT,UAAA;AAAA,QACJ,KAAA,KAAA;AACI,UAAA,KAAA,GAAQ,EAAA;AACR,UAAA,MAAA,GAAS,CAAA;AACT,UAAA;AAAA,QACJ,KAAA,KAAA;AACI,UAAA,KAAA,GAAQ,EAAA;AACR,UAAA,MAAA,GAAS,CAAA;AACT,UAAA;AAAA,QACJ,KAAA,KAAA;AACI,UAAA,KAAA,GAAQ,EAAA;AACR,UAAA,MAAA,GAAS,CAAA;AACT,UAAA;AAAA,QACJ,KAAA,QAAA;AACI,UAAA,KAAA,GAAQ,GAAA;AACR,UAAA,MAAA,GAAS,CAAA;AACT,UAAA;AAAA,QACJ,KAAA,MAAA;AACI,UAAA,KAAA,GAAQ,EAAA;AACR,UAAA,MAAA,GAAS,CAAA;AACT,UAAA;AAAA,QACJ,KAAA,MAAA;AACI,UAAA,KAAA,GAAQ,GAAA;AACR,UAAA,MAAA,GAAS,CAAA;AACT,UAAA;AAAA,QACJ,KAAA,QAAA;AACI,UAAA,KAAA,GAAQ,GAAA;AACR,UAAA,MAAA,GAAS,CAAA;AACT,UAAA;AAAA,QACJ,KAAA,MAAA;AACI,UAAA,KAAA,GAAQ,EAAA;AACR,UAAA,MAAA,GAAS,CAAA;AACT,UAAA;AAAA,QACJ,KAAA,KAAA;AACI,UAAA,KAAA,GAAQ,EAAA;AACR,UAAA,MAAA,GAAS,CAAA;AACT,UAAA;AAAA,QACJ,KAAA,UAAA;AACI,UAAA,KAAA,GAAQ,EAAA;AACR,UAAA,MAAA,GAAS,CAAA;AACT,UAAA;AAAA,QACJ,KAAA,SAAA;AACI,UAAA,KAAA,GAAQ,EAAA;AACR,UAAA,MAAA,GAAS,CAAA;AACT,UAAA;AAAA,QACJ,KAAA,SAAA;AACI,UAAA,KAAA,GAAQ,EAAA;AACR,UAAA,MAAA,GAAS,CAAA;AACT,UAAA;AAAA,QACJ,KAAA,MAAA;AACI,UAAA,KAAA,GAAQ,EAAA;AACR,UAAA,MAAA,GAAS,CAAA;AACT,UAAA;AAAA,QACJ,KAAA,MAAA;AACI,UAAA,KAAA,GAAQ,GAAA;AACR,UAAA,MAAA,GAAS,CAAA;AACT,UAAA;AAAA,QACJ,KAAA,OAAA;AACI,UAAA,KAAA,GAAQ,GAAA;AACR,UAAA,MAAA,GAAS,CAAA;AACT,UAAA;AAAA,QACJ,KAAA,SAAA;AACI,UAAA,KAAA,GAAQ,GAAA;AACR,UAAA,MAAA,GAAS,CAAA;AACT,UAAA;AAAA,QACJ,KAAA,KAAA;AACI,UAAA,KAAA,GAAQ,CAAA;AACR,UAAA,MAAA,GAAS,CAAA;AACT,UAAA;AAAA,QACJ,KAAA,KAAA;AACI,UAAA,KAAA,GAAQ,EAAA;AACR,UAAA,MAAA,GAAS,CAAA;AACT,UAAA;AAAA,QACJ,KAAA,KAAA;AACI,UAAA,KAAA,GAAQ,EAAA;AACR,UAAA,MAAA,GAAS,CAAA;AACT,UAAA;AAAA,QACJ,KAAA,KAAA;AACI,UAAA,KAAA,GAAQ,EAAA;AACR,UAAA,MAAA,GAAS,CAAA;AACT,UAAA;AAAA,QACJ,KAAA,KAAA;AACI,UAAA,KAAA,GAAQ,EAAA;AACR,UAAA,MAAA,GAAS,CAAA;AACT,UAAA;AAAA,QACJ,KAAA,KAAA;AACI,UAAA,KAAA,GAAQ,EAAA;AACR,UAAA,MAAA,GAAS,CAAA;AACT,UAAA;AAAA,QACJ,KAAA,MAAA;AACI,UAAA,KAAA,GAAQ,EAAA;AACR,UAAA,MAAA,GAAS,CAAA;AACT,UAAA;AAAA,QACJ,KAAA,KAAA;AACI,UAAA,KAAA,GAAQ,EAAA;AACR,UAAA,MAAA,GAAS,CAAA;AACT,UAAA;AAAA,QACJ,KAAA,OAAA;AACI,UAAA,KAAA,GAAQ,EAAA;AACR,UAAA,MAAA,GAAS,CAAA;AACT,UAAA;AAAA,QACJ,KAAA,KAAA;AACI,UAAA,KAAA,GAAQ,EAAA;AACR,UAAA,MAAA,GAAS,CAAA;AACT,UAAA;AAAA,QACJ,KAAA,OAAA;AACI,UAAA,KAAA,GAAQ,EAAA;AACR,UAAA,MAAA,GAAS,CAAA;AACT,UAAA;AAAA,QACJ,KAAA,OAAA;AACI,UAAA,KAAA,GAAQ,EAAA;AACR,UAAA,MAAA,GAAS,CAAA;AACT,UAAA;AAAA,QACJ,KAAA,KAAA;AACI,UAAA,KAAA,GAAQ,EAAA;AACR,UAAA,MAAA,GAAS,CAAA;AACT,UAAA;AAAA,QACJ,KAAA,WAAA;AACI,UAAA,KAAA,GAAQ,EAAA;AACR,UAAA,MAAA,GAAS,CAAA;AACT,UAAA;AAAA,QACJ,KAAA,KAAA;AACI,UAAA,KAAA,GAAQ,EAAA;AACR,UAAA,MAAA,GAAS,CAAA;AACT,UAAA;AAAA,QACJ,KAAA,KAAA;AACI,UAAA,KAAA,GAAQ,EAAA;AACR,UAAA,MAAA,GAAS,CAAA;AACT,UAAA;AAAA,QACJ,KAAA,KAAA;AACI,UAAA,KAAA,GAAQ,EAAA;AACR,UAAA,MAAA,GAAS,CAAA;AACT,UAAA;AAAA,QACJ,KAAA,KAAA;AACI,UAAA,KAAA,GAAQ,EAAA;AACR,UAAA,MAAA,GAAS,CAAA;AACT,UAAA;AAAA,QACJ,KAAA,KAAA;AACI,UAAA,KAAA,GAAQ,EAAA;AACR,UAAA,MAAA,GAAS,CAAA;AACT,UAAA;AAAA,QACJ,KAAA,KAAA;AACI,UAAA,KAAA,GAAQ,EAAA;AACR,UAAA,MAAA,GAAS,CAAA;AACT,UAAA;AAAA,QACJ,KAAA,KAAA;AACI,UAAA,KAAA,GAAQ,EAAA;AACR,UAAA,MAAA,GAAS,CAAA;AACT,UAAA;AAAA,QACJ,KAAA,KAAA;AACI,UAAA,KAAA,GAAQ,EAAA;AACR,UAAA,MAAA,GAAS,CAAA;AACT,UAAA;AAAA,QACJ,KAAA,KAAA;AACI,UAAA,KAAA,GAAQ,EAAA;AACR,UAAA,MAAA,GAAS,CAAA;AACT,UAAA;AAAA,QACJ,KAAA,KAAA;AACI,UAAA,KAAA,GAAQ,EAAA;AACR,UAAA,MAAA,GAAS,CAAA;AACT,UAAA;AAAA,QACJ,KAAA,KAAA;AACI,UAAA,KAAA,GAAQ,EAAA;AACR,UAAA,MAAA,GAAS,CAAA;AACT,UAAA;AAAA,QACJ,KAAA,QAAA;AACI,UAAA,KAAA,GAAQ,EAAA;AACR,UAAA,MAAA,GAAS,CAAA;AACT,UAAA;AAAA,QACJ;AACI,UAAA,KAAA,GAAQ,EAAA;AACR,UAAA,MAAA,GAAS,CAAA;AAAA;AAGrB,IAAA,MAAM,KAAA,GAAQ,OAAO,IAAA,IAAQ,QAAA,GAAW,KAAK,IAAA,GAAO,IAAA;AAEpD,IAAA,IAAI,KAAA,IAAS,MAAA,IAAa,MAAA,IAAU,MAAA,IAAa,SAAS,MAAA,EAAW;AACjE,MAAA,MAAM,IAAI,aAAa,kBAAkB,CAAA;AAAA,IAC7C;AAEA,IAAA,MAAM,MAAA,GAAkC;AAAA,MACpC,UAAA,EAAY;AAAA,QACR;AAAA,UACI,OAAA,EAAS,KAAK,SAAA,CAAU;AAAA,YACpB,IAAA,EAAM;AAAA,cACF;AAAA,gBACI,MAAA,EAAQ,QAAA,CAAS,IAAA,CAAK,IAAA,CAAK,KAAK,CAAA;AAAA,gBAChC,MAAA,EAAQ,QAAA,CAAS,IAAA,CAAK,IAAA,CAAK,QAAQ,CAAA;AAAA,gBACnC,OAAA,EAAS;AAAA;AACb,aACJ;AAAA,YACA,KAAA;AAAA,YACA,KAAA;AAAA,YACA;AAAA,WACH,CAAA;AAAA,UACD,QAAA,EAAU,KAAK,GAAA;AAAI;AACvB;AACJ,KACJ;AAEA,IAAA,IAAI,KAAK,IAAA,IAAA,CAAA,aAAyB;AAC9B,MAAA,MAAA,CAAO,OAAO,IAAA,CAAK,QAAA;AAAA,IACvB,CAAA,MAAO;AACH,MAAA,MAAA,CAAO,OAAO,IAAA,CAAK,QAAA;AACnB,MAAA,MAAA,CAAO,OAAO,GAAA,CAAI,IAAA;AAAA,IACtB;AAEA,IAAA,MAAM,kBAAkB,KAAA,CAAM,SAAA,CAAU,IAAA,CAAK,SAAA,CAAU,MAAM,CAAC,CAAA;AAC9D,IAAA,IAAI,CAAC,eAAA,EAAiB,MAAM,IAAI,aAAa,2BAA2B,CAAA;AAExE,IAAA,MAAM,QAAA,GAAW,MAAM,KAAA,CAAM,OAAA,CAAQ,UAAA,EAAY;AAAA,MAC7C,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,IAAI,eAAA,CAAgB;AAAA,QACtB,MAAA,EAAQ;AAAA,OACX;AAAA,KACJ,CAAA;AAED,IAAA,OAAO,KAAA,CAAM,OAAA,CAAQ,QAAA,EAAU,CAAC,MAAA,KAAW;AACvC,MAAA,IAAI,OAAQ,MAAA,CAAO,IAAA,CAA6B,MAAA,KAAW,QAAA,EAAU;AACjE,QAAA,OAAO;AAAA,UACH,MAAA,EAAQ,IAAA,CAAK,KAAA,CAAO,MAAA,CAAO,KAA4B,MAAM;AAAA,SACjE;AAAA,MACJ;AAEA,MAAA,OAAO,MAAA,CAAO,IAAA;AAAA,IAClB,CAAC,CAAA;AAAA,EACL,CAAA;AACJ,CAAC,CAAA;;;ACrTM,IAAM,uBAAuB,UAAA,EAAkC,CAAE,CAAC,GAAA,EAAK,KAAK,KAAA,KAAU;AACzF,EAAA,MAAM,UAAA,GAAa,MAAM,OAAA,CAAQ,CAAA,EAAG,IAAI,aAAA,CAAc,YAAA,CAAa,CAAC,CAAC,CAAA,uBAAA,CAAyB,CAAA;AAU9F,EAAA,OAAO,eAAe,aAAA,CAAc,QAAA,EAAkB,IAAA,GAAA,CAAA,aAAoC;AACtF,IAAA,MAAM,SAAA,GAAY,KAAK,GAAA,EAAI;AAC3B,IAAA,MAAM,eAAA,GAAkB,UAAU,QAAA,EAAS;AAC3C,IAAA,MAAM,OAAA,GAAU,IAAA,KAAA,CAAA;AAEhB,IAAA,MAAM,aAAA,GAAgB;AAAA,MAClB,KAAA,EAAO,KAAK,SAAA,CAAU;AAAA,QAClB,CAAC,OAAA,GAAU,YAAA,GAAe,WAAW,GAAG;AAAA,UACpC;AAAA,YACI,EAAA,EAAI,QAAA;AAAA,YACJ,QAAA,EAAU,eAAA;AAAA,YACV,OAAA,EAAS,GAAA;AAAA,YACT,EAAA,EAAI;AAAA;AACR,SACJ;AAAA,QACA,CAAC,OAAA,GAAU,WAAA,GAAc,YAAY,GAAG,EAAC;AAAA,QACzC,MAAM,GAAA,CAAI;AAAA,OACb;AAAA,KACL;AAEA,IAAA,MAAM,kBAAkB,KAAA,CAAM,SAAA,CAAU,IAAA,CAAK,SAAA,CAAU,aAAa,CAAC,CAAA;AACrE,IAAA,IAAI,CAAC,eAAA,EAAiB,MAAM,IAAI,aAAa,0BAA0B,CAAA;AAEvE,IAAA,MAAM,QAAA,GAAW,MAAM,KAAA,CAAM,OAAA,CAAQ,UAAA,EAAY;AAAA,MAC7C,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,IAAI,eAAA,CAAgB;AAAA,QACtB,MAAA,EAAQ;AAAA,OACX;AAAA,KACJ,CAAA;AAED,IAAA,OAAO,KAAA,CAAM,OAAA,CAAQ,QAAA,EAAU,CAAC,MAAA,KAAW;AACvC,MAAA,MAAM,OAAO,MAAA,CAAO,IAAA;AACpB,MAAA,IAAI,OAAO,IAAA,CAAK,IAAA,KAAS,QAAA,EAAU;AAC/B,QAAA,OAAO;AAAA,UACH,IAAA,EAAM,IAAA,CAAK,KAAA,CAAM,IAAA,CAAK,IAAI,CAAA;AAAA,UAC1B,QAAQ,IAAA,CAAK;AAAA,SACjB;AAAA,MACJ;AAEA,MAAA,OAAO,MAAA,CAAO,IAAA;AAAA,IAClB,CAAC,CAAA;AAAA,EACL,CAAA;AACJ,CAAC,CAAA;ACtDM,IAAM,wBAAwB,UAAA,EAAmC,CAAE,CAAC,GAAA,EAAK,KAAK,KAAA,KAAU;AAC3F,EAAA,MAAM,UAAA,GAAa,MAAM,OAAA,CAAQ,CAAA,EAAG,IAAI,aAAA,CAAc,KAAA,CAAM,CAAC,CAAC,CAAA,oBAAA,CAAsB,CAAA;AAUpF,EAAA,OAAO,eAAe,cAAA,CAAe,QAAA,EAA6B,OAAA,EAAiB;AAC/E,IAAA,MAAM,SAAA,GAAYA,YAAU,QAAQ,CAAA;AAEpC,IAAA,MAAM,MAAA,GAAS;AAAA,MACX,IAAA,EAAM,OAAA;AAAA,MACN,OAAA,EAAS,SAAA;AAAA,MACT,WAAA,EAAa,SAAA,CAAU,GAAA,CAAI,MAAM,EAAE,CAAA;AAAA,MACnC,MAAM,GAAA,CAAI,IAAA;AAAA,MACV,YAAY,GAAA,CAAI;AAAA,KACpB;AAEA,IAAA,MAAM,kBAAkB,KAAA,CAAM,SAAA,CAAU,IAAA,CAAK,SAAA,CAAU,MAAM,CAAC,CAAA;AAC9D,IAAA,IAAI,CAAC,eAAA,EAAiB,MAAM,IAAI,aAAa,0BAA0B,CAAA;AAEvE,IAAA,MAAM,QAAA,GAAW,MAAM,KAAA,CAAM,OAAA,CAAQ,UAAA,EAAY;AAAA,MAC7C,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,IAAI,eAAA,CAAgB;AAAA,QACtB,MAAA,EAAQ;AAAA,OACX;AAAA,KACJ,CAAA;AAED,IAAA,OAAO,KAAA,CAAM,QAAQ,QAAQ,CAAA;AAAA,EACjC,CAAA;AACJ,CAAC,CAAA;;;ACvCM,IAAM,mBAAmB,UAAA,EAA8B,CAAE,CAAC,GAAA,EAAK,KAAK,KAAA,KAAU;AACjF,EAAA,MAAM,UAAA,GAAa,MAAM,OAAA,CAAQ,CAAA,EAAG,IAAI,aAAA,CAAc,MAAA,CAAO,CAAC,CAAC,CAAA,iBAAA,CAAmB,CAAA;AASlF,EAAA,OAAO,eAAe,UAAU,MAAA,EAAgB;AAC5C,IAAA,MAAM,MAAA,GAAS;AAAA,MACX,GAAA,EAAK,MAAA;AAAA,MACL,MAAM,GAAA,CAAI;AAAA,KACd;AAEA,IAAA,MAAM,kBAAkB,KAAA,CAAM,SAAA,CAAU,IAAA,CAAK,SAAA,CAAU,MAAM,CAAC,CAAA;AAC9D,IAAA,IAAI,CAAC,eAAA,EAAiB,MAAM,IAAI,aAAa,0BAA0B,CAAA;AAEvE,IAAA,MAAM,QAAA,GAAW,MAAM,KAAA,CAAM,OAAA,CAAQ,UAAA,EAAY;AAAA,MAC7C,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,IAAI,eAAA,CAAgB;AAAA,QACtB,MAAA,EAAQ;AAAA,OACX;AAAA,KACJ,CAAA;AAED,IAAA,OAAO,KAAA,CAAM,QAAQ,QAAQ,CAAA;AAAA,EACjC,CAAA;AACJ,CAAC,CAAA;;;AC5BM,IAAM,uBAAuB,UAAA,EAAkC,CAAE,CAAC,GAAA,EAAK,KAAK,KAAA,KAAU;AACzF,EAAA,MAAM,UAAA,GAAa,MAAM,OAAA,CAAQ,CAAA,EAAG,IAAI,aAAA,CAAc,MAAA,CAAO,CAAC,CAAC,CAAA,sBAAA,CAAwB,CAAA;AAUvF,EAAA,OAAO,eAAe,aAAA,CAAc,WAAA,EAAsB,MAAA,EAAgB;AACtE,IAAA,MAAM,MAAA,GAAS;AAAA,MACX,GAAA,EAAK,MAAA;AAAA,MACL,WAAA,EAAa,cAAc,CAAA,GAAI,CAAA;AAAA,MAC/B,MAAM,GAAA,CAAI;AAAA,KACd;AAEA,IAAA,MAAM,kBAAkB,KAAA,CAAM,SAAA,CAAU,IAAA,CAAK,SAAA,CAAU,MAAM,CAAC,CAAA;AAC9D,IAAA,IAAI,CAAC,eAAA,EAAiB,MAAM,IAAI,aAAa,0BAA0B,CAAA;AAEvE,IAAA,MAAM,QAAA,GAAW,MAAM,KAAA,CAAM,OAAA,CAAQ,UAAA,EAAY;AAAA,MAC7C,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,IAAI,eAAA,CAAgB;AAAA,QACtB,MAAA,EAAQ;AAAA,OACX;AAAA,KACJ,CAAA;AAED,IAAA,OAAO,KAAA,CAAM,QAAQ,QAAQ,CAAA;AAAA,EACjC,CAAA;AACJ,CAAC,CAAA;AC3BM,IAAM,6BAA6B,UAAA,EAAwC,CAAE,CAAC,GAAA,EAAK,KAAK,KAAA,KAAU;AACrG,EAAA,MAAM,UAAA,GAAa,MAAM,OAAA,CAAQ,CAAA,EAAG,IAAI,aAAA,CAAc,IAAA,CAAK,CAAC,CAAC,CAAA,qBAAA,CAAuB,CAAA;AASpF,EAAA,OAAO,eAAe,oBAAoB,YAAA,EAAgC;AACtE,IAAA,MAAM,gBAAA,GAAmB,OAAO,YAAA,IAAgB,QAAA;AAChD,IAAA,MAAM,gBAAgB,gBAAA,GAAmB,MAAM,iBAAiB,GAAA,EAAK,YAAY,IAAI,YAAA,CAAa,QAAA;AAElG,IAAA,MAAM,QAAA,GAAW,cAAc,SAAA,IAAa,CAAA;AAE5C,IAAA,MAAM,MAAA,GAAS;AAAA,MACX,UAAA,EAAY,GAAA;AAAA,MACZ,UAAU,MAAA,CAAO,GAAA,CAAI,GAAA,GAAM,UAAA,CAAW,gBAAgB,CAAC,CAAA;AAAA,MACvD,UAAU,GAAA,CAAI,QAAA;AAAA,MACd,QAAA,EAAU,KAAK,SAAA,CAAU;AAAA,QACrB,MAAA,EAAQ;AAAA,UACJ,KAAA,EAAO,cAAc,KAAA,IAAS,IAAA;AAAA,UAC9B,MAAA,EAAQ,cAAc,MAAA,IAAU;AAAA,SACpC;AAAA,QACA,SAAA,EAAW;AAAA,UACP,KAAA,EAAO,cAAc,KAAA,IAAS,IAAA;AAAA,UAC9B,MAAA,EAAQ,cAAc,MAAA,IAAU,IAAA;AAAA,UAChC,IAAA,EAAM;AAAA;AACV,OACH;AAAA,KACL;AAEA,IAAA,MAAM,aAAa,gBAAA,GAAmBC,EAAAA,CAAG,YAAA,CAAa,YAAY,IAAI,YAAA,CAAa,IAAA;AACnF,IAAA,MAAM,QAAA,GAAW,IAAIC,SAAA,EAAS;AAC9B,IAAA,QAAA,CAAS,MAAA,CAAO,eAAe,UAAA,EAAY;AAAA,MACvC,QAAA,EAAU,MAAA;AAAA,MACV,WAAA,EAAa;AAAA,KAChB,CAAA;AAED,IAAA,MAAM,kBAAkB,KAAA,CAAM,SAAA,CAAU,IAAA,CAAK,SAAA,CAAU,MAAM,CAAC,CAAA;AAC9D,IAAA,IAAI,CAAC,eAAA,EAAiB,MAAM,IAAI,aAAa,0BAA0B,CAAA;AAEvE,IAAA,MAAM,QAAA,GAAW,MAAM,KAAA,CAAM,OAAA;AAAA,MACzB,KAAA,CAAM,QAAQ,UAAA,EAAY;AAAA,QACtB,MAAA,EAAQ;AAAA,OACX,CAAA;AAAA,MACD;AAAA,QACI,MAAA,EAAQ,MAAA;AAAA,QACR,OAAA,EAAS,SAAS,UAAA,EAAW;AAAA,QAC7B,IAAA,EAAM,SAAS,SAAA;AAAU;AAC7B,KACJ;AAEA,IAAA,OAAO,KAAA,CAAM,QAAQ,QAAQ,CAAA;AAAA,EACjC,CAAA;AACJ,CAAC,CAAA;;;AC3DM,IAAM,2BAA2B,UAAA,EAAsC,CAAE,CAAC,GAAA,EAAK,KAAK,KAAA,KAAU;AACjG,EAAA,MAAM,UAAA,GAAa,MAAM,OAAA,CAAQ,CAAA,EAAG,IAAI,aAAA,CAAc,KAAA,CAAM,CAAC,CAAC,CAAA,iBAAA,CAAmB,CAAA;AAUjF,EAAA,OAAO,eAAe,iBAAA,CAAkB,KAAA,EAAe,QAAA,EAAkB;AACrE,IAAA,MAAM,MAAA,GAAS;AAAA,MACX,QAAA;AAAA,MACA,KAAA;AAAA,MACA,MAAM,GAAA,CAAI;AAAA,KACd;AAEA,IAAA,MAAM,kBAAkB,KAAA,CAAM,SAAA,CAAU,IAAA,CAAK,SAAA,CAAU,MAAM,CAAC,CAAA;AAC9D,IAAA,IAAI,CAAC,eAAA,EAAiB,MAAM,IAAI,aAAa,0BAA0B,CAAA;AAEvE,IAAA,MAAM,QAAA,GAAW,MAAM,KAAA,CAAM,OAAA,CAAQ,KAAA,CAAM,OAAA,CAAQ,UAAA,EAAY,EAAE,MAAA,EAAQ,eAAA,EAAiB,CAAA,EAAG;AAAA,MACzF,MAAA,EAAQ;AAAA,KACX,CAAA;AAED,IAAA,OAAO,KAAA,CAAM,QAAQ,QAAQ,CAAA;AAAA,EACjC,CAAA;AACJ,CAAC,CAAA;ACxBM,IAAM,2BAA2B,UAAA,EAAsC,CAAE,CAAC,GAAA,EAAK,KAAK,KAAA,KAAU;AACjG,EAAA,MAAM,UAAA,GAAa,MAAM,OAAA,CAAQ,CAAA,EAAG,IAAI,aAAA,CAAc,IAAA,CAAK,CAAC,CAAC,CAAA,mBAAA,CAAqB,CAAA;AAUlF,EAAA,OAAO,eAAe,iBAAA,CAAkB,YAAA,EAAgC,OAAA,EAAiB;AACrF,IAAA,MAAM,MAAA,GAAkC;AAAA,MACpC,IAAA,EAAM,OAAA;AAAA,MACN,UAAA,EAAY,GAAA;AAAA,MACZ,QAAA,EAAU,CAAA,CAAA,EAAI,OAAO,CAAA,EAAG,0BAAA,CAAA,qBAA+B,IAAA,EAAK,EAAE,OAAA,EAAS,CAAC,CAAA,CAAA;AAAA,MACxE,MAAM,GAAA,CAAI;AAAA,KACd;AAEA,IAAA,MAAM,gBAAA,GAAmB,OAAO,YAAA,IAAgB,QAAA;AAChD,IAAA,MAAM,gBAAgB,gBAAA,GAAmB,MAAM,iBAAiB,GAAA,EAAK,YAAY,IAAI,YAAA,CAAa,QAAA;AAElG,IAAA,MAAA,CAAO,WAAA,GAAc,cAAc,KAAA,IAAS,IAAA;AAC5C,IAAA,MAAA,CAAO,YAAA,GAAe,cAAc,MAAA,IAAU,IAAA;AAE9C,IAAA,MAAM,aAAa,gBAAA,GAAmBD,EAAAA,CAAG,YAAA,CAAa,YAAY,IAAI,YAAA,CAAa,IAAA;AACnF,IAAA,MAAM,QAAA,GAAW,IAAIC,SAAAA,EAAS;AAC9B,IAAA,QAAA,CAAS,MAAA,CAAO,eAAe,UAAA,EAAY;AAAA,MACvC,QAAA,EAAU,MAAA;AAAA,MACV,WAAA,EAAa;AAAA,KAChB,CAAA;AAED,IAAA,MAAM,kBAAkB,KAAA,CAAM,SAAA,CAAU,IAAA,CAAK,SAAA,CAAU,MAAM,CAAC,CAAA;AAC9D,IAAA,IAAI,CAAC,eAAA,EAAiB,MAAM,IAAI,aAAa,0BAA0B,CAAA;AAEvE,IAAA,MAAM,QAAA,GAAW,MAAM,KAAA,CAAM,OAAA;AAAA,MACzB,KAAA,CAAM,QAAQ,UAAA,EAAY;AAAA,QACtB,MAAA,EAAQ;AAAA,OACX,CAAA;AAAA,MACD;AAAA,QACI,MAAA,EAAQ,MAAA;AAAA,QACR,OAAA,EAAS,SAAS,UAAA,EAAW;AAAA,QAC7B,IAAA,EAAM,SAAS,SAAA;AAAU;AAC7B,KACJ;AAEA,IAAA,OAAO,KAAA,CAAM,QAAQ,QAAQ,CAAA;AAAA,EACjC,CAAA;AACJ,CAAC,CAAA;;;ACjDM,IAAM,yBAAyB,UAAA,EAAoC,CAAE,CAAC,GAAA,EAAK,KAAK,KAAA,KAAU;AAC7F,EAAA,MAAM,UAAA,GAAa,MAAM,OAAA,CAAQ,CAAA,EAAG,IAAI,aAAA,CAAc,KAAA,CAAM,CAAC,CAAC,CAAA,qBAAA,CAAuB,CAAA;AAUrF,EAAA,OAAO,eAAe,eAAA,CAAgB,IAAA,EAAc,OAAA,EAAiB;AACjE,IAAA,IAAI,KAAK,MAAA,IAAU,CAAA,SAAU,IAAA,CAAK,GAAA,GAAM,QAAA,EAAS;AAEjD,IAAA,MAAM,MAAA,GAAS;AAAA,MACX,IAAA,EAAM,OAAA;AAAA,MACN,KAAA,EAAO,IAAA;AAAA,MACP,MAAM,GAAA,CAAI;AAAA,KACd;AAEA,IAAA,MAAM,kBAAkB,KAAA,CAAM,SAAA,CAAU,IAAA,CAAK,SAAA,CAAU,MAAM,CAAC,CAAA;AAC9D,IAAA,IAAI,CAAC,eAAA,EAAiB,MAAM,IAAI,aAAa,0BAA0B,CAAA;AAEvE,IAAA,MAAM,QAAA,GAAW,MAAM,KAAA,CAAM,OAAA,CAAQ,UAAA,EAAY;AAAA,MAC7C,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,IAAI,eAAA,CAAgB;AAAA,QACtB,MAAA,EAAQ;AAAA,OACX;AAAA,KACJ,CAAA;AAED,IAAA,OAAO,KAAA,CAAM,QAAQ,QAAQ,CAAA;AAAA,EACjC,CAAA;AACJ,CAAC,CAAA;;;AChCM,IAAM,0BAA0B,UAAA,EAAqC,CAAE,CAAC,GAAA,EAAK,KAAK,KAAA,KAAU;AAC/F,EAAA,MAAM,UAAA,GAAa,MAAM,OAAA,CAAQ,CAAA,EAAG,IAAI,aAAA,CAAc,KAAA,CAAM,CAAC,CAAC,CAAA,uBAAA,CAAyB,CAAA;AAYvF,EAAA,OAAO,eAAe,gBAAA,CAAiB,QAAA,EAAkB,OAAA,EAAiB;AACtE,IAAA,MAAM,MAAA,GAAS;AAAA,MACX,IAAA,EAAM,OAAA;AAAA,MACN,UAAA,EAAY,QAAA;AAAA,MACZ,MAAM,GAAA,CAAI,IAAA;AAAA,MACV,UAAU,GAAA,CAAI;AAAA,KAClB;AAEA,IAAA,MAAM,kBAAkB,KAAA,CAAM,SAAA,CAAU,IAAA,CAAK,SAAA,CAAU,MAAM,CAAC,CAAA;AAC9D,IAAA,IAAI,CAAC,eAAA,EAAiB,MAAM,IAAI,aAAa,0BAA0B,CAAA;AAEvE,IAAA,MAAM,QAAA,GAAW,MAAM,KAAA,CAAM,OAAA,CAAQ,KAAA,CAAM,OAAA,CAAQ,UAAA,EAAY,EAAE,MAAA,EAAQ,eAAA,EAAiB,CAAA,EAAG;AAAA,MACzF,MAAA,EAAQ;AAAA,KACX,CAAA;AAED,IAAA,OAAO,KAAA,CAAM,QAAQ,QAAQ,CAAA;AAAA,EACjC,CAAA;AACJ,CAAC,CAAA;AChBM,IAAM,yBAAyB,UAAA,EAAoC,CAAE,CAAC,GAAA,EAAK,KAAK,KAAA,KAAU;AAC7F,EAAA,MAAM,UAAA,GAAa,MAAM,OAAA,CAAQ,CAAA,EAAG,IAAI,aAAA,CAAc,UAAA,CAAW,CAAC,CAAC,CAAA,qBAAA,CAAuB,CAAA;AAU1F,EAAA,OAAO,eAAe,gBAAgB,OAAA,EAAiC;AACnE,IAAA,MAAM,IAAA,GAAOF,WAAAA,CAAU,OAAA,CAAQ,IAAA,IAAQ,EAAE,CAAA;AACzC,IAAA,MAAM,UAAA,GAAc,QAAQ,KAAA,KAAU,CAAA,IAAK,QAAQ,KAAA,KAAU,CAAA,GAAK,OAAO,EAAC;AAE1E,IAAA,MAAM,MAAA,GAAS;AAAA,MACX,SAAS,GAAA,CAAI,QAAA;AAAA,MACb,QAAQ,OAAA,CAAQ,QAAA;AAAA,MAChB,SAAS,OAAA,CAAQ,OAAA;AAAA,MACjB,WAAW,OAAA,CAAQ,SAAA;AAAA,MACnB,SAAS,OAAA,CAAQ,OAAA;AAAA,MACjB,UAAA,EAAY,CAAC,mBAAmB,CAAA;AAAA,MAChC,OAAO,OAAA,CAAQ,KAAA;AAAA,MACf,IAAA,EAAM;AAAA,KACV;AAEA,IAAA,MAAM,kBAAkB,KAAA,CAAM,SAAA,CAAU,IAAA,CAAK,SAAA,CAAU,MAAM,CAAC,CAAA;AAC9D,IAAA,IAAI,CAAC,eAAA,EAAiB,MAAM,IAAI,aAAa,0BAA0B,CAAA;AAEvE,IAAA,MAAM,QAAA,GAAW,MAAM,KAAA,CAAM,OAAA,CAAQ,UAAA,EAAY;AAAA,MAC7C,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,IAAI,eAAA,CAAgB;AAAA,QACtB,MAAA,EAAQ;AAAA,OACX;AAAA,KACJ,CAAA;AAED,IAAA,OAAO,KAAA,CAAM,QAAQ,QAAQ,CAAA;AAAA,EACjC,CAAA;AACJ,CAAC,CAAA;;;AChDM,IAAM,uBAAuB,UAAA,EAAkC,CAAE,CAAC,GAAA,EAAK,GAAG,KAAA,KAAU;AACvF,EAAA,MAAM,UAAA,GAAa,MAAM,OAAA,CAAQ,CAAA,EAAG,IAAI,aAAA,CAAc,OAAA,CAAQ,CAAC,CAAC,CAAA,+BAAA,CAAiC,CAAA;AAUjG,EAAA,OAAO,eAAe,cAAc,WAAA,EAAqB;AACrD,IAAA,MAAM,MAAA,GAAS;AAAA,MACX,YAAA,EAAc,WAAA;AAAA,MACd,aAAA,EAAe;AAAA,KACnB;AAEA,IAAA,MAAM,kBAAkB,KAAA,CAAM,SAAA,CAAU,IAAA,CAAK,SAAA,CAAU,MAAM,CAAC,CAAA;AAC9D,IAAA,IAAI,CAAC,eAAA,EAAiB,MAAM,IAAI,aAAa,0BAA0B,CAAA;AAEvE,IAAA,MAAM,QAAA,GAAW,MAAM,KAAA,CAAM,OAAA,CAAQ,UAAA,EAAY;AAAA,MAC7C,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,IAAI,eAAA,CAAgB;AAAA,QACtB,MAAA,EAAQ;AAAA,OACX;AAAA,KACJ,CAAA;AAED,IAAA,OAAO,KAAA,CAAM,QAAQ,QAAQ,CAAA;AAAA,EACjC,CAAA;AACJ,CAAC,CAAA;;;ACRM,IAAM,qBAAqB,UAAA,EAAgC,CAAE,CAAC,GAAA,EAAK,KAAK,KAAA,KAAU;AACrF,EAAA,MAAM,UAAA,GAAa,MAAM,OAAA,CAAQ,CAAA,EAAG,IAAI,aAAA,CAAc,KAAA,CAAM,CAAC,CAAC,CAAA,oBAAA,CAAsB,CAAA;AASpF,EAAA,OAAO,eAAe,YAAY,OAAA,EAA6B;AAC3D,IAAA,IAAI,QAAQ,OAAA,CAAQ,MAAA,IAAU,GAAG,MAAM,IAAI,aAAa,qCAAqC,CAAA;AAE7F,IAAA,MAAM,MAAA,GAAS;AAAA,MACX,QAAA,EAAU,KAAK,GAAA,EAAI;AAAA,MACnB,KAAA,EAAO,MAAA,CAAO,IAAA,CAAK,GAAA,EAAK,CAAA;AAAA,MACxB,KAAA,EAAO,IAAA;AAAA,MACP,SAAS,OAAA,CAAQ,OAAA;AAAA,MACjB,YAAA,EAAc,OAAA,CAAQ,OAAA,CAAQ,GAAA,CAAI,MAAM,EAAE,CAAA;AAAA,MAC1C,WAAA,EAAa,CAAA;AAAA,MACb,UAAA,EAAY,CAAA;AAAA,MACZ,YAAY,GAAA,CAAI,QAAA;AAAA,MAChB,MAAM,GAAA,CAAI,IAAA;AAAA,MACV,OAAA,EAAS;AAAA,KACb;AAEA,IAAA,IAAI,OAAA,CAAQ,IAAA,IAAQ,OAAA,CAAQ,IAAA,CAAK,SAAS,CAAA,EAAG;AACzC,MAAA,MAAA,CAAO,QAAQ,OAAA,CAAQ,IAAA;AACvB,MAAA,MAAA,CAAO,WAAA,GAAc,CAAA;AAAA,IACzB;AAEA,IAAA,MAAM,kBAAkB,KAAA,CAAM,SAAA,CAAU,IAAA,CAAK,SAAA,CAAU,MAAM,CAAC,CAAA;AAC9D,IAAA,IAAI,CAAC,eAAA,EAAiB,MAAM,IAAI,aAAa,2BAA2B,CAAA;AAExE,IAAA,MAAM,QAAA,GAAW,MAAM,KAAA,CAAM,OAAA,CAAQ,KAAA,CAAM,OAAA,CAAQ,UAAA,EAAY,EAAE,MAAA,EAAQ,eAAA,EAAiB,CAAA,EAAG;AAAA,MACzF,MAAA,EAAQ;AAAA,KACX,CAAA;AAED,IAAA,MAAM,IAAA,GAAO,MAAM,KAAA,CAAM,OAAA,CAAQ,QAAQ,CAAA;AACzC,IAAA,OAAA,CAAQ,YAAA,GAAe,OAAA,CAAQ,YAAA,IAAgB,OAAA,CAAQ,UAAA;AACvD,IAAA,IAAI,OAAA,CAAQ,YAAA,EAAc,MAAM,GAAA,CAAI,iBAAA,CAAkB,OAAA,CAAQ,YAAA,EAAc,IAAA,CAAK,OAAO,CAAA,CAAE,KAAA,CAAM,KAAA,CAAM,OAAO,KAAK,CAAA;AAElH,IAAA,OAAO,IAAA;AAAA,EACX,CAAA;AACJ,CAAC,CAAA;;;ACjEM,IAAM,oBAAoB,UAAA,EAA+B,CAAE,CAAC,GAAA,EAAK,KAAK,KAAA,KAAU;AACnF,EAAA,MAAM,UAAA,GAAa,MAAM,OAAA,CAAQ,CAAA,EAAG,IAAI,aAAA,CAAc,WAAA,CAAY,CAAC,CAAC,CAAA,yBAAA,CAA2B,CAAA;AAY/F,EAAA,OAAO,eAAe,UAAA,CAAW,OAAA,EAA4B,OAAA,EAAiB;AAC1E,IAAA,MAAM,MAAA,GAAS;AAAA,MACX,IAAA,EAAM,OAAA;AAAA,MACN,IAAA,EAAM,CAAA;AAAA,MACN,KAAA,EAAO,SAAA;AAAA,MACP,KAAA,EAAO,EAAA;AAAA,MACP,SAAA,EAAW,EAAA;AAAA,MACX,QAAA,EAAU,EAAA;AAAA,MACV,MAAA,EAAQ,KAAK,SAAA,CAAU;AAAA,QACnB,OAAO,OAAA,CAAQ;AAAA,OAClB,CAAA;AAAA,MACD,MAAA,EAAQ,CAAA;AAAA,MACR,GAAA,EAAK,CAAA;AAAA,MACL,MAAM,GAAA,CAAI,IAAA;AAAA,MACV,MAAA,EAAQ,OAAA,CAAQ,MAAA,GAAS,CAAA,GAAI;AAAA,KACjC;AAEA,IAAA,MAAM,kBAAkB,KAAA,CAAM,SAAA,CAAU,IAAA,CAAK,SAAA,CAAU,MAAM,CAAC,CAAA;AAC9D,IAAA,IAAI,CAAC,eAAA,EAAiB,MAAM,IAAI,aAAa,0BAA0B,CAAA;AAEvE,IAAA,MAAM,QAAA,GAAW,MAAM,KAAA,CAAM,OAAA,CAAQ,UAAA,EAAY;AAAA,MAC7C,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,IAAI,eAAA,CAAgB;AAAA,QACtB,MAAA,EAAQ;AAAA,OACX;AAAA,KACJ,CAAA;AAED,IAAA,OAAO,KAAA,CAAM,OAAA,CAAQ,QAAA,EAAU,CAAC,MAAA,KAAW;AACvC,MAAA,IAAI,OAAQ,MAAA,CAAO,IAAA,CAA6B,MAAA,KAAW,QAAA,EAAU;AACjE,QAAC,MAAA,CAAO,IAAA,CAA4B,MAAA,GAAS,IAAA,CAAK,KAAA;AAAA,UAC7C,OAAO,IAAA,CAA4B;AAAA,SACxC;AAAA,MACJ;AAEA,MAAA,OAAO,MAAA,CAAO,IAAA;AAAA,IAClB,CAAC,CAAA;AAAA,EACL,CAAA;AACJ,CAAC,CAAA;;;ACdM,IAAM,oBAAoB,UAAA,EAA+B,CAAE,CAAC,GAAA,EAAK,KAAK,KAAA,KAAU;AACnF,EAAA,MAAM,UAAA,GAAa,MAAM,OAAA,CAAQ,CAAA,EAAG,IAAI,aAAA,CAAc,KAAA,CAAM,CAAC,CAAC,CAAA,gBAAA,CAAkB,CAAA;AAUhF,EAAA,OAAO,eAAe,UAAA,CAAW,OAAA,EAA4B,OAAA,EAAiB;AA1DlF,IAAA,IAAA,EAAA;AA2DQ,IAAA,MAAM,MAAA,GAAS;AAAA,MACX,QAAA,EAAU,OAAA;AAAA,MACV,UAAU,OAAA,CAAQ,QAAA;AAAA,MAClB,SAAS,OAAA,CAAQ,OAAA;AAAA,MACjB,YAAA,EAAA,CAAc,EAAA,GAAA,OAAA,CAAQ,WAAA,KAAR,IAAA,GAAA,EAAA,GAAuB,CAAA;AAAA,MACrC,MAAA,EAAQ,KAAA;AAAA,MACR,mBAAA,EAAqB,CAAC,CAAC,OAAA,CAAQ,iBAAA;AAAA,MAC/B,oBAAA,EAAsB,CAAC,CAAC,OAAA,CAAQ,iBAAA;AAAA,MAChC,oBAAA,EAAsB,CAAC,CAAC,OAAA,CAAQ,eAAA;AAAA,MAChC,YAAA,EAAc,CAAC,CAAC,OAAA,CAAQ,WAAA;AAAA,MACxB,SAAA,EAAW,CAAA;AAAA,MACX,GAAA,EAAK,CAAA;AAAA,MACL,MAAM,GAAA,CAAI;AAAA,KACd;AAEA,IAAA,MAAM,kBAAkB,KAAA,CAAM,SAAA,CAAU,IAAA,CAAK,SAAA,CAAU,MAAM,CAAC,CAAA;AAC9D,IAAA,IAAI,CAAC,eAAA,EAAiB,MAAM,IAAI,aAAa,0BAA0B,CAAA;AAEvE,IAAA,MAAM,QAAA,GAAW,MAAM,KAAA,CAAM,OAAA,CAAQ,UAAA,EAAY;AAAA,MAC7C,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,IAAI,eAAA,CAAgB;AAAA,QACtB,MAAA,EAAQ;AAAA,OACX;AAAA,KACJ,CAAA;AAED,IAAA,OAAO,KAAA,CAAM,QAAQ,QAAQ,CAAA;AAAA,EACjC,CAAA;AACJ,CAAC,CAAA;;;ACxDM,IAAM,8BAA8B,UAAA,EAAyC,CAAE,CAAC,GAAA,EAAK,GAAG,KAAA,KAAU;AACrG,EAAA,MAAM,UAAA,GAAa,MAAM,OAAA,CAAQ,CAAA,EAAG,IAAI,aAAA,CAAc,OAAA,CAAQ,CAAC,CAAC,CAAA,+BAAA,CAAiC,CAAA;AAUjG,EAAA,OAAO,eAAe,qBAAqB,OAAA,EAAsC;AAC7E,IAAA,MAAM,YAAA,GAAe,OAAA,CAAQ,cAAA,IAAkB,EAAC;AAEhD,IAAA,IAAI,OAAA,CAAQ,KAAA,IAAS,OAAA,CAAQ,KAAA,CAAM,UAAU,CAAA,EAAG;AAC5C,MAAA,IAAI,OAAA,CAAQ,KAAA,CAAM,MAAA,GAAS,CAAA,EAAG;AAC1B,QAAA,MAAM,IAAI,aAAa,mCAAmC,CAAA;AAAA,MAC9D;AAEA,MAAA,KAAA,MAAW,SAAA,IAAa,QAAQ,KAAA,EAAO;AACnC,QAAA,MAAM,WAAA,GAAc,MAAM,GAAA,CAAI,kBAAA,CAAmB;AAAA,UAC7C,IAAA,EAAM;AAAA,SACT,CAAA;AAED,QAAA,MAAM,GAAA,GAAM,WAAA,CAAY,SAAA,IAAa,WAAA,CAAY,KAAA;AACjD,QAAA,YAAA,CAAa,KAAK,GAAG,CAAA;AAAA,MACzB;AAAA,IACJ;AAEA,IAAA,IAAI,YAAA,CAAa,SAAS,CAAA,EAAG;AACzB,MAAA,MAAM,IAAI,aAAa,mCAAmC,CAAA;AAAA,IAC9D;AAEA,IAAA,MAAM,MAAA,GAAS;AAAA,MACX,cAAc,OAAA,CAAQ,WAAA;AAAA,MACtB,OAAO,OAAA,CAAQ,KAAA;AAAA,MACf,aAAa,OAAA,CAAQ,WAAA;AAAA,MACrB,cAAA,EAAgB,YAAA;AAAA,MAChB,YAAY,OAAA,CAAQ,SAAA;AAAA,MACpB,aAAA,EAAe,QAAA;AAAA;AAAA,MACf,WAAA,EAAa,KAAK,GAAA;AAAI,KAC1B;AAEA,IAAA,MAAM,kBAAkB,KAAA,CAAM,SAAA,CAAU,IAAA,CAAK,SAAA,CAAU,MAAM,CAAC,CAAA;AAC9D,IAAA,IAAI,CAAC,eAAA,EAAiB,MAAM,IAAI,aAAa,0BAA0B,CAAA;AAEvE,IAAA,MAAM,QAAA,GAAW,MAAM,KAAA,CAAM,OAAA,CAAQ,UAAA,EAAY;AAAA,MAC7C,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,IAAI,eAAA,CAAgB;AAAA,QACtB,MAAA,EAAQ;AAAA,OACX;AAAA,KACJ,CAAA;AAED,IAAA,OAAO,KAAA,CAAM,QAAQ,QAAQ,CAAA;AAAA,EACjC,CAAA;AACJ,CAAC,CAAA;;;ACpEM,IAAM,wBAAwB,UAAA,EAAmC,CAAE,CAAC,GAAA,EAAK,KAAK,KAAA,KAAU;AAC3F,EAAA,MAAM,UAAA,GAAa;AAAA,IACf,CAAA,CAAA,cAAmB,KAAA,CAAM,OAAA,CAAQ,CAAA,EAAG,IAAI,aAAA,CAAc,WAAA,CAAY,CAAC,CAAC,CAAA,wBAAA,CAA0B,CAAA;AAAA,IAC9F,CAAA,CAAA,eAAoB,KAAA,CAAM,OAAA,CAAQ,CAAA,EAAG,IAAI,aAAA,CAAc,WAAA,CAAY,CAAC,CAAC,CAAA,yBAAA,CAA2B;AAAA,GACpG;AAWA,EAAA,OAAO,eAAe,cAAA,CAClB,OAAA,EACA,QAAA,EACA,IAAA,GAAA,CAAA,aAC+B;AApCvC,IAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA;AAqCQ,IAAA,MAAM,SACF,IAAA,KAAA,CAAA,cACM;AAAA,MACI,UAAA,EAAY,KAAK,SAAA,CAAU;AAAA,QACvB,KAAA,EAAO,QAAA;AAAA,QACP,IAAA,EAAM,CAAA;AAAA,QACN,KAAA,EAAO,SAAA;AAAA,QACP,KAAA,EAAA,CAAO,EAAA,GAAA,OAAA,CAAQ,KAAA,KAAR,IAAA,GAAA,EAAA,GAAiB,QAAA;AAAA,QACxB,SAAA,EAAA,CAAW,EAAA,GAAA,OAAA,CAAQ,SAAA,KAAR,IAAA,GAAA,EAAA,GAAqB,KAAK,GAAA,EAAI;AAAA,QACzC,QAAA,EAAU,EAAA;AAAA,QACV,MAAA,EAAQ,EAAE,KAAA,EAAO,OAAA,CAAQ,KAAA,EAAM;AAAA,QAC/B,OAAA,EAAS,KAAA;AAAA,QACT,MAAA,EAAA,CAAQ,aAAQ,MAAA,KAAR,IAAA,GAAA,EAAA,GAAA,CAAA;AAAA,QACR,YAAY,GAAA,CAAI,GAAA;AAAA;AAAA,QAChB,GAAA,EAAK;AAAA,OACR,CAAA;AAAA,MACD,MAAM,GAAA,CAAI;AAAA,KACd,GACA;AAAA,MACI,IAAA,EAAM,QAAA;AAAA,MACN,IAAA,EAAM,CAAA;AAAA,MACN,KAAA,EAAO,SAAA;AAAA,MACP,KAAA,EAAA,CAAO,EAAA,GAAA,OAAA,CAAQ,KAAA,KAAR,IAAA,GAAA,EAAA,GAAiB,QAAA;AAAA,MACxB,SAAA,EAAA,CAAW,EAAA,GAAA,OAAA,CAAQ,SAAA,KAAR,IAAA,GAAA,EAAA,GAAqB,KAAK,GAAA,EAAI;AAAA,MACzC,QAAA,EAAU,EAAA;AAAA,MACV,MAAA,EAAQ,KAAK,SAAA,CAAU;AAAA,QACnB,OAAO,OAAA,CAAQ;AAAA,OAClB,CAAA;AAAA,MACD,MAAA,EAAA,CAAQ,aAAQ,MAAA,KAAR,IAAA,GAAA,EAAA,GAAA,CAAA;AAAA,MACR,GAAA,EAAK,CAAA;AAAA,MACL,MAAM,GAAA,CAAI,IAAA;AAAA,MACV,MAAA,EAAQ;AAAA,KACZ;AAEV,IAAA,MAAM,kBAAkB,KAAA,CAAM,SAAA,CAAU,IAAA,CAAK,SAAA,CAAU,MAAM,CAAC,CAAA;AAC9D,IAAA,IAAI,CAAC,eAAA,EAAiB,MAAM,IAAI,aAAa,0BAA0B,CAAA;AAEvE,IAAA,MAAM,WAAW,MAAM,KAAA,CAAM,OAAA,CAAQ,UAAA,CAAW,IAAI,CAAA,EAAG;AAAA,MACnD,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,IAAI,eAAA,CAAgB;AAAA,QACtB,MAAA,EAAQ;AAAA,OACX;AAAA,KACJ,CAAA;AAED,IAAA,OAAO,KAAA,CAAM,QAAQ,QAAQ,CAAA;AAAA,EACjC,CAAA;AACJ,CAAC,CAAA;;;AC3EM,IAAM,yBAAyB,UAAA,EAAoC,CAAE,CAAC,GAAA,EAAK,KAAK,KAAA,KAAU;AAC7F,EAAA,MAAM,UAAA,GAAa,MAAM,OAAA,CAAQ,CAAA,EAAG,IAAI,aAAA,CAAc,UAAA,CAAW,CAAC,CAAC,CAAA,qBAAA,CAAuB,CAAA;AAU1F,EAAA,OAAO,eAAe,gBAAgB,EAAA,EAAY;AAC9C,IAAA,MAAM,MAAA,GAAS;AAAA,MACX,SAAS,GAAA,CAAI,QAAA;AAAA,MACb;AAAA,KACJ;AAEA,IAAA,MAAM,kBAAkB,KAAA,CAAM,SAAA,CAAU,IAAA,CAAK,SAAA,CAAU,MAAM,CAAC,CAAA;AAC9D,IAAA,IAAI,CAAC,eAAA,EAAiB,MAAM,IAAI,aAAa,0BAA0B,CAAA;AAEvE,IAAA,MAAM,QAAA,GAAW,MAAM,KAAA,CAAM,OAAA,CAAQ,UAAA,EAAY;AAAA,MAC7C,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,IAAI,eAAA,CAAgB;AAAA,QACtB,MAAA,EAAQ;AAAA,OACX;AAAA,KACJ,CAAA;AAED,IAAA,OAAO,KAAA,CAAM,QAAQ,QAAQ,CAAA;AAAA,EACjC,CAAA;AACJ,CAAC,CAAA;ACvBM,IAAM,sBAAsB,UAAA,EAAiC,CAAE,CAAC,GAAA,EAAK,KAAK,KAAA,KAAU;AACvF,EAAA,MAAM,UAAA,GAAa,MAAM,OAAA,CAAQ,CAAA,EAAG,IAAI,aAAA,CAAc,OAAA,CAAQ,CAAC,CAAC,CAAA,uBAAA,CAAyB,CAAA;AASzF,EAAA,OAAO,eAAe,aAAa,OAAA,EAA4B;AAC3D,IAAA,MAAM,QAAA,GAAWA,YAAU,OAAO,CAAA;AAClC,IAAA,MAAM,SAAA,GAAY,SAAS,GAAA,CAAI,CAAC,QAAQ,EAAE,OAAA,EAAS,IAAG,CAAE,CAAA;AAExD,IAAA,MAAM,MAAA,GAAS;AAAA,MACX,SAAA,EAAW,IAAA,CAAK,SAAA,CAAU,SAAS,CAAA;AAAA,MACnC,MAAM,GAAA,CAAI;AAAA,KACd;AAEA,IAAA,MAAM,kBAAkB,KAAA,CAAM,SAAA,CAAU,IAAA,CAAK,SAAA,CAAU,MAAM,CAAC,CAAA;AAC9D,IAAA,IAAI,CAAC,eAAA,EAAiB,MAAM,IAAI,aAAa,0BAA0B,CAAA;AAEvE,IAAA,MAAM,QAAA,GAAW,MAAM,KAAA,CAAM,OAAA,CAAQ,KAAA,CAAM,OAAA,CAAQ,UAAA,EAAY,EAAE,MAAA,EAAQ,eAAA,EAAiB,CAAA,EAAG;AAAA,MACzF,MAAA,EAAQ;AAAA,KACX,CAAA;AAED,IAAA,OAAO,KAAA,CAAM,QAAQ,QAAQ,CAAA;AAAA,EACjC,CAAA;AACJ,CAAC,CAAA;;;ACrCM,IAAM,uBAAuB,UAAA,EAAkC,CAAE,CAAC,GAAA,EAAK,GAAG,KAAA,KAAU;AACvF,EAAA,MAAM,UAAA,GAAa,MAAM,OAAA,CAAQ,CAAA,EAAG,IAAI,aAAA,CAAc,OAAA,CAAQ,CAAC,CAAC,CAAA,+BAAA,CAAiC,CAAA;AAUjG,EAAA,OAAO,eAAe,cAAc,SAAA,EAAmB;AACnD,IAAA,MAAM,MAAA,GAAS;AAAA,MACX,UAAA,EAAY;AAAA,KAChB;AAEA,IAAA,MAAM,kBAAkB,KAAA,CAAM,SAAA,CAAU,IAAA,CAAK,SAAA,CAAU,MAAM,CAAC,CAAA;AAC9D,IAAA,IAAI,CAAC,eAAA,EAAiB,MAAM,IAAI,aAAa,0BAA0B,CAAA;AAEvE,IAAA,MAAM,QAAA,GAAW,MAAM,KAAA,CAAM,OAAA,CAAQ,UAAA,EAAY;AAAA,MAC7C,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,IAAI,eAAA,CAAgB;AAAA,QACtB,MAAA,EAAQ;AAAA,OACX;AAAA,KACJ,CAAA;AAED,IAAA,OAAO,KAAA,CAAM,QAAQ,QAAQ,CAAA;AAAA,EACjC,CAAA;AACJ,CAAC,CAAA;;;ACVM,IAAM,oBAAoB,UAAA,EAA+B,CAAE,CAAC,GAAA,EAAK,KAAK,KAAA,KAAU;AACnF,EAAA,MAAM,UAAA,GAAa;AAAA,IACf,CAAA,CAAA,cAAmB,KAAA,CAAM,OAAA,CAAQ,CAAA,EAAG,IAAI,aAAA,CAAc,IAAA,CAAK,CAAC,CAAC,CAAA,yBAAA,CAAA,EAA6B;AAAA,MACtF,MAAA,EAAQ;AAAA,KACX,CAAA;AAAA,IACD,CAAA,CAAA,eAAoB,KAAA,CAAM,OAAA,CAAQ,CAAA,EAAG,IAAI,aAAA,CAAc,KAAA,CAAM,CAAC,CAAC,CAAA,uBAAA,CAAA,EAA2B;AAAA,MACtF,MAAA,EAAQ;AAAA,KACX;AAAA,GACL;AAWA,EAAA,OAAO,eAAe,UAAA,CAClB,WAAA,EACA,QAAA,EACA,IAAA,GAAA,CAAA,aACF;AACE,IAAA,MAAM,eAAA,GAAkB,IAAA,CAAK,GAAA,EAAI,CAAE,QAAA,EAAS;AAE5C,IAAA,MAAM,SACF,IAAA,KAAA,CAAA,cACM;AAAA,MACI,IAAA,EAAM,QAAA;AAAA,MACN,QAAA,EAAU,eAAA;AAAA,MACV,MAAA,EAAQ,WAAA;AAAA,MACR,MAAA,EAAQ,CAAA;AAAA,MACR,MAAM,GAAA,CAAI;AAAA,KACd,GACA;AAAA,MACI,IAAA,EAAM,QAAA;AAAA,MACN,QAAA,EAAU,eAAA;AAAA,MACV,MAAA,EAAQ,WAAA;AAAA,MACR,MAAA,EAAQ,CAAA;AAAA,MACR,MAAM,GAAA,CAAI;AAAA,KACd;AAEV,IAAA,MAAM,kBAAkB,KAAA,CAAM,SAAA,CAAU,IAAA,CAAK,SAAA,CAAU,MAAM,CAAC,CAAA;AAC9D,IAAA,IAAI,CAAC,eAAA,EAAiB,MAAM,IAAI,aAAa,0BAA0B,CAAA;AAEvE,IAAA,MAAM,WAAW,MAAM,KAAA,CAAM,OAAA,CAAQ,UAAA,CAAW,IAAI,CAAA,EAAG;AAAA,MACnD,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,IAAI,eAAA,CAAgB;AAAA,QACtB,MAAA,EAAQ;AAAA,OACX;AAAA,KACJ,CAAA;AAED,IAAA,OAAO,KAAA,CAAM,QAAQ,QAAQ,CAAA;AAAA,EACjC,CAAA;AACJ,CAAC,CAAA;AChEM,IAAM,8BAA8B,UAAA,EAAyC,CAAE,CAAC,GAAA,EAAK,GAAG,KAAA,KAAU;AACrG,EAAA,MAAM,UAAA,GAAa,MAAM,OAAA,CAAQ,CAAA,EAAG,IAAI,aAAA,CAAc,KAAA,CAAM,CAAC,CAAC,CAAA,2BAAA,CAA6B,CAAA;AAU3F,EAAA,OAAO,eAAe,oBAAA,CAAqB,OAAA,EAA4B,iBAAA,GAA6B,KAAA,EAAO;AACvG,IAAA,MAAM,KAAA,GAAQA,YAAU,OAAO,CAAA;AAE/B,IAAA,MAAM,MAAA,GAAS;AAAA,MACX,WAAA,EAAa,IAAA,CAAK,SAAA,CAAU,KAAA,CAAM,GAAA,CAAI,CAAC,IAAA,MAAU,EAAE,IAAA,EAAK,CAAE,CAAC,CAAA;AAAA,MAC3D,KAAA,EAAO,oBAAoB,CAAA,GAAI;AAAA,KACnC;AAEA,IAAA,MAAM,kBAAkB,KAAA,CAAM,SAAA,CAAU,IAAA,CAAK,SAAA,CAAU,MAAM,CAAC,CAAA;AAC9D,IAAA,IAAI,CAAC,eAAA,EAAiB,MAAM,IAAI,aAAa,0BAA0B,CAAA;AAEvE,IAAA,MAAM,QAAA,GAAW,MAAM,KAAA,CAAM,OAAA,CAAQ,KAAA,CAAM,OAAA,CAAQ,UAAA,EAAY,EAAE,MAAA,EAAQ,eAAA,EAAiB,CAAA,EAAG;AAAA,MACzF,MAAA,EAAQ;AAAA,KACX,CAAA;AAED,IAAA,OAAO,KAAA,CAAM,QAAQ,QAAQ,CAAA;AAAA,EACjC,CAAA;AACJ,CAAC,CAAA;;;ACxBM,IAAM,uBAAuB,UAAA,EAAkC,CAAE,CAAC,GAAA,EAAK,KAAK,KAAA,KAAU;AACzF,EAAA,MAAM,UAAA,GAAa;AAAA,IACf,CAAA,CAAA,cAAmB,KAAA,CAAM,OAAA,CAAQ,CAAA,EAAG,IAAI,aAAA,CAAc,IAAA,CAAK,CAAC,CAAC,CAAA,mBAAA,CAAqB,CAAA;AAAA,IAClF,CAAA,CAAA,eAAoB,KAAA,CAAM,OAAA,CAAQ,CAAA,EAAG,IAAI,aAAA,CAAc,KAAA,CAAM,CAAC,CAAC,CAAA,oBAAA,CAAsB;AAAA,GACzF;AASA,EAAA,OAAO,eAAe,aAAA,CAAc,IAAA,EAAgC,MAAA,GAAS,KAAA,EAAO;AAChF,IAAA,MAAM,EAAE,QAAA,EAAU,IAAA,GAAA,CAAA,aAAwB,IAAA,EAAK,GAAI,IAAA;AACnD,IAAA,MAAM,OAAA,GAAU,IAAA,KAAA,CAAA;AAChB,IAAA,MAAM,MAAA,GAAS,GAAA,CAAI,GAAA,IAAO,IAAA,CAAK,OAAA;AAE/B,IAAA,IAAI,UAAU,MAAA,KAAW,KAAA;AACrB,MAAA,MAAM,IAAI,aAAa,2DAA2D,CAAA;AAEtF,IAAA,IAAI,CAAC,OAAA,IAAW,MAAA,KAAW,OAAO,MAAM,IAAI,aAAa,qDAAqD,CAAA;AAE9G,IAAA,MAAM,MAAA,GAAS;AAAA,MACX,CAAC,OAAA,GAAU,MAAA,GAAS,MAAM,GAAG,QAAA;AAAA,MAC7B,QAAA,EAAU,KAAK,GAAA,EAAI;AAAA,MACnB,IAAA,EAAM;AAAA,QACF;AAAA,UACI,UAAU,IAAA,CAAK,QAAA;AAAA,UACf,aAAa,IAAA,CAAK,KAAA;AAAA,UAClB,SAAS,IAAA,CAAK,OAAA;AAAA,UACd,MAAA,EAAQ;AAAA;AACZ,OACJ;AAAA,MACA,MAAA,EAAQ,SAAS,CAAA,GAAI;AAAA,KACzB;AAEA,IAAA,IAAI,CAAC,OAAA,EAAS;AACV,MAAA,MAAA,CAAO,OAAO,GAAA,CAAI,IAAA;AAAA,IACtB;AAEA,IAAA,MAAM,kBAAkB,KAAA,CAAM,SAAA,CAAU,IAAA,CAAK,SAAA,CAAU,MAAM,CAAC,CAAA;AAC9D,IAAA,IAAI,CAAC,eAAA,EAAiB,MAAM,IAAI,aAAa,2BAA2B,CAAA;AAExE,IAAA,MAAM,WAAW,MAAM,KAAA,CAAM,OAAA,CAAQ,UAAA,CAAW,IAAI,CAAA,EAAG;AAAA,MACnD,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,IAAI,eAAA,CAAgB;AAAA,QACtB,MAAA,EAAQ;AAAA,OACX;AAAA,KACJ,CAAA;AAED,IAAA,OAAO,KAAA,CAAM,QAAQ,QAAQ,CAAA;AAAA,EACjC,CAAA;AACJ,CAAC,CAAA;ACvDM,IAAM,8BAA8B,UAAA,EAAyC,CAAE,CAAC,GAAA,EAAK,GAAG,KAAA,KAAU;AACrG,EAAA,MAAM,UAAA,GAAa,MAAM,OAAA,CAAQ,CAAA,EAAG,IAAI,aAAA,CAAc,OAAA,CAAQ,CAAC,CAAC,CAAA,gCAAA,CAAkC,CAAA;AAUlG,EAAA,OAAO,eAAe,qBAAqB,OAAA,EAAsC;AAC7E,IAAA,MAAM,UAAA,GAAaA,WAAAA,CAAU,OAAA,CAAQ,UAAU,CAAA;AAE/C,IAAA,MAAM,MAAA,GAAS;AAAA,MACX,WAAA,EAAa,UAAA;AAAA,MACb,YAAY,OAAA,CAAQ;AAAA,KACxB;AAEA,IAAA,MAAM,kBAAkB,KAAA,CAAM,SAAA,CAAU,IAAA,CAAK,SAAA,CAAU,MAAM,CAAC,CAAA;AAC9D,IAAA,IAAI,CAAC,eAAA,EAAiB,MAAM,IAAI,aAAa,0BAA0B,CAAA;AAEvE,IAAA,MAAM,QAAA,GAAW,MAAM,KAAA,CAAM,OAAA,CAAQ,UAAA,EAAY;AAAA,MAC7C,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,IAAI,eAAA,CAAgB;AAAA,QACtB,MAAA,EAAQ;AAAA,OACX;AAAA,KACJ,CAAA;AAED,IAAA,OAAO,KAAA,CAAM,QAAQ,QAAQ,CAAA;AAAA,EACjC,CAAA;AACJ,CAAC,CAAA;;;AC1CM,IAAM,0BAA0B,UAAA,EAAqC,CAAE,CAAC,GAAA,EAAK,MAAM,KAAA,KAAU;AAChG,EAAA,MAAM,UAAA,GAAa,MAAM,OAAA,CAAQ,CAAA,EAAG,IAAI,aAAA,CAAc,KAAA,CAAM,CAAC,CAAC,CAAA,uBAAA,CAAyB,CAAA;AASvF,EAAA,OAAO,eAAe,iBAAiB,OAAA,EAAiB;AACpD,IAAA,MAAM,MAAA,GAAS;AAAA,MACX,IAAA,EAAM;AAAA,KACV;AAEA,IAAA,MAAM,kBAAkB,KAAA,CAAM,SAAA,CAAU,IAAA,CAAK,SAAA,CAAU,MAAM,CAAC,CAAA;AAC9D,IAAA,IAAI,CAAC,eAAA,EAAiB,MAAM,IAAI,aAAa,0BAA0B,CAAA;AAEvE,IAAA,MAAM,QAAA,GAAW,MAAM,KAAA,CAAM,OAAA,CAAQ,KAAA,CAAM,OAAA,CAAQ,UAAA,EAAY,EAAE,MAAA,EAAQ,eAAA,EAAiB,CAAA,EAAG;AAAA,MACzF,MAAA,EAAQ;AAAA,KACX,CAAA;AAED,IAAA,OAAO,KAAA,CAAM,QAAQ,QAAQ,CAAA;AAAA,EACjC,CAAA;AACJ,CAAC,CAAA;;;ACxBM,IAAM,uBAAuB,UAAA,EAAkC,CAAE,CAAC,GAAA,EAAK,KAAK,KAAA,KAAU;AACzF,EAAA,MAAM,UAAA,GAAa,MAAM,OAAA,CAAQ,CAAA,EAAG,IAAI,aAAA,CAAc,KAAA,CAAM,CAAC,CAAC,CAAA,mBAAA,CAAqB,CAAA;AASnF,EAAA,OAAO,eAAe,cAAc,OAAA,EAAiB;AACjD,IAAA,MAAM,MAAA,GAAS;AAAA,MACX,IAAA,EAAM,OAAA;AAAA,MACN,MAAM,GAAA,CAAI;AAAA,KACd;AAEA,IAAA,MAAM,kBAAkB,KAAA,CAAM,SAAA,CAAU,IAAA,CAAK,SAAA,CAAU,MAAM,CAAC,CAAA;AAC9D,IAAA,IAAI,CAAC,eAAA,EAAiB,MAAM,IAAI,aAAa,0BAA0B,CAAA;AAEvE,IAAA,MAAM,QAAA,GAAW,MAAM,KAAA,CAAM,OAAA,CAAQ,UAAA,EAAY;AAAA,MAC7C,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,IAAI,eAAA,CAAgB;AAAA,QACtB,MAAA,EAAQ;AAAA,OACX;AAAA,KACJ,CAAA;AAED,IAAA,OAAO,KAAA,CAAM,QAAQ,QAAQ,CAAA;AAAA,EACjC,CAAA;AACJ,CAAC,CAAA;;;ACXM,IAAM,kBAAkB,UAAA,EAA6B,CAAE,CAAC,GAAA,EAAK,KAAK,KAAA,KAAU;AAC/E,EAAA,MAAM,UAAA,GAAa,MAAM,OAAA,CAAQ,CAAA,EAAG,IAAI,aAAA,CAAc,WAAA,CAAY,CAAC,CAAC,CAAA,yBAAA,CAA2B,CAAA;AAU/F,EAAA,OAAO,eAAe,QAAA,CAAS,OAAA,EAA0B,OAAA,EAAiB;AACtE,IAAA,MAAM,MAAA,GAAS;AAAA,MACX,IAAA,EAAM,OAAA;AAAA,MACN,IAAA,EAAM,CAAA;AAAA,MACN,KAAA,EAAO,SAAA;AAAA,MACP,KAAA,EAAO,EAAA;AAAA,MACP,SAAA,EAAW,EAAA;AAAA,MACX,QAAA,EAAU,EAAA;AAAA,MACV,MAAA,EAAQ,KAAK,SAAA,CAAU;AAAA,QACnB,OAAO,OAAA,CAAQ;AAAA,OAClB,CAAA;AAAA,MACD,SAAS,OAAA,CAAQ,OAAA;AAAA,MACjB,MAAA,EAAQ,CAAA;AAAA,MACR,MAAM,GAAA,CAAI,IAAA;AAAA,MACV,MAAA,EAAQ,OAAA,CAAQ,MAAA,GAAS,CAAA,GAAI;AAAA,KACjC;AAEA,IAAA,MAAM,kBAAkB,KAAA,CAAM,SAAA,CAAU,IAAA,CAAK,SAAA,CAAU,MAAM,CAAC,CAAA;AAC9D,IAAA,IAAI,CAAC,eAAA,EAAiB,MAAM,IAAI,aAAa,0BAA0B,CAAA;AAEvE,IAAA,MAAM,QAAA,GAAW,MAAM,KAAA,CAAM,OAAA,CAAQ,UAAA,EAAY;AAAA,MAC7C,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,IAAI,eAAA,CAAgB;AAAA,QACtB,MAAA,EAAQ;AAAA,OACX;AAAA,KACJ,CAAA;AAED,IAAA,OAAO,KAAA,CAAM,OAAA,CAAQ,QAAA,EAAU,CAAC,MAAA,KAAW;AACvC,MAAA,MAAM,OAAO,MAAA,CAAO,IAAA;AACpB,MAAA,IAAI,OAAO,IAAA,CAAK,MAAA,IAAU,QAAA,EAAU;AAChC,QAAA,IAAA,CAAK,MAAA,GAAS,IAAA,CAAK,KAAA,CAAM,IAAA,CAAK,MAAM,CAAA;AAAA,MACxC;AAEA,MAAA,OAAO,IAAA;AAAA,IACX,CAAC,CAAA;AAAA,EACL,CAAA;AACJ,CAAC,CAAA;;;ACnDM,IAAM,sBAAsB,UAAA,EAAiC,CAAE,CAAC,GAAA,EAAK,KAAK,KAAA,KAAU;AACvF,EAAA,MAAM,UAAA,GAAa;AAAA,IACf,CAAA,CAAA,cAAmB,KAAA,CAAM,OAAA,CAAQ,CAAA,EAAG,IAAI,aAAA,CAAc,WAAA,CAAY,CAAC,CAAC,CAAA,wBAAA,CAA0B,CAAA;AAAA,IAC9F,CAAA,CAAA,eAAoB,KAAA,CAAM,OAAA,CAAQ,CAAA,EAAG,IAAI,aAAA,CAAc,WAAA,CAAY,CAAC,CAAC,CAAA,yBAAA,CAA2B;AAAA,GACpG;AAWA,EAAA,OAAO,eAAe,YAAA,CAClB,OAAA,EACA,QAAA,EACA,IAAA,GAAA,CAAA,aACF;AArCN,IAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA;AAsCQ,IAAA,MAAM,gBACF,IAAA,KAAA,CAAA,cACM;AAAA,MACI,UAAA,EAAY,KAAK,SAAA,CAAU;AAAA,QACvB,KAAA,EAAO,QAAA;AAAA,QACP,IAAA,EAAM,CAAA;AAAA,QACN,KAAA,EAAO,SAAA;AAAA,QACP,KAAA,EAAA,CAAO,EAAA,GAAA,OAAA,CAAQ,KAAA,KAAR,IAAA,GAAA,EAAA,GAAiB,EAAA;AAAA,QACxB,SAAA,EAAA,CAAW,EAAA,GAAA,OAAA,CAAQ,SAAA,KAAR,IAAA,GAAA,EAAA,GAAqB,KAAK,GAAA,EAAI;AAAA,QACzC,QAAA,EAAU,EAAA;AAAA,QACV,MAAA,EAAQ,EAAE,KAAA,EAAO,OAAA,CAAQ,KAAA,EAAM;AAAA,QAC/B,OAAA,EAAS,KAAA;AAAA,QACT,YAAY,OAAA,CAAQ,OAAA;AAAA,QACpB,MAAA,EAAA,CAAQ,EAAA,GAAA,OAAA,CAAQ,MAAA,KAAR,IAAA,GAAA,EAAA,GAAkB;AAAA,OAC7B;AAAA,KACL,GACA;AAAA,MACI,IAAA,EAAM,QAAA;AAAA,MACN,IAAA,EAAM,CAAA;AAAA,MACN,KAAA,EAAO,SAAA;AAAA,MACP,KAAA,EAAA,CAAO,EAAA,GAAA,OAAA,CAAQ,KAAA,KAAR,IAAA,GAAA,EAAA,GAAiB,EAAA;AAAA,MACxB,SAAA,EAAA,CAAW,EAAA,GAAA,OAAA,CAAQ,SAAA,KAAR,IAAA,GAAA,EAAA,GAAqB,KAAK,GAAA,EAAI;AAAA,MACzC,QAAA,EAAU,EAAA;AAAA,MACV,MAAA,EAAQ,KAAK,SAAA,CAAU;AAAA,QACnB,OAAO,OAAA,CAAQ;AAAA,OAClB,CAAA;AAAA,MACD,SAAS,OAAA,CAAQ,OAAA;AAAA,MACjB,MAAA,EAAA,CAAQ,EAAA,GAAA,OAAA,CAAQ,MAAA,KAAR,IAAA,GAAA,EAAA,GAAkB,CAAA;AAAA,MAC1B,MAAM,GAAA,CAAI,IAAA;AAAA,MACV,MAAA,EAAQ;AAAA,KACZ;AAEV,IAAA,MAAM,kBAAkB,KAAA,CAAM,SAAA,CAAU,IAAA,CAAK,SAAA,CAAU,aAAa,CAAC,CAAA;AACrE,IAAA,IAAI,CAAC,eAAA,EAAiB,MAAM,IAAI,aAAa,0BAA0B,CAAA;AAEvE,IAAA,MAAM,WAAW,MAAM,KAAA,CAAM,OAAA,CAAQ,UAAA,CAAW,IAAI,CAAA,EAAG;AAAA,MACnD,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,IAAI,eAAA,CAAgB;AAAA,QACtB,MAAA,EAAQ;AAAA,OACX;AAAA,KACJ,CAAA;AAED,IAAA,OAAO,KAAA,CAAM,QAAQ,QAAQ,CAAA;AAAA,EACjC,CAAA;AACJ,CAAC,CAAA;;;ACzEM,IAAM,yBAAyB,UAAA,EAAoC,CAAE,CAAC,GAAA,EAAK,KAAK,KAAA,KAAU;AAC7F,EAAA,MAAM,UAAA,GAAa,MAAM,OAAA,CAAQ,CAAA,EAAG,IAAI,aAAA,CAAc,KAAA,CAAM,CAAC,CAAC,CAAA,mBAAA,CAAqB,CAAA;AASnF,EAAA,OAAO,eAAe,gBAAgB,OAAA,EAAiB;AACnD,IAAA,MAAM,MAAA,GAAS;AAAA,MACX,IAAA,EAAM,OAAA;AAAA,MACN,MAAM,GAAA,CAAI;AAAA,KACd;AAEA,IAAA,MAAM,kBAAkB,KAAA,CAAM,SAAA,CAAU,IAAA,CAAK,SAAA,CAAU,MAAM,CAAC,CAAA;AAC9D,IAAA,IAAI,CAAC,eAAA,EAAiB,MAAM,IAAI,aAAa,0BAA0B,CAAA;AAEvE,IAAA,MAAM,QAAA,GAAW,MAAM,KAAA,CAAM,OAAA,CAAQ,KAAA,CAAM,OAAA,CAAQ,UAAA,EAAY,EAAE,MAAA,EAAQ,eAAA,EAAiB,CAAA,EAAG;AAAA,MACzF,MAAA,EAAQ;AAAA,KACX,CAAA;AAED,IAAA,OAAO,KAAA,CAAM,QAAQ,QAAQ,CAAA;AAAA,EACjC,CAAA;AACJ,CAAC,CAAA;;;AC5BM,IAAM,0BAA0B,UAAA,EAAqC,CAAE,CAAC,GAAA,EAAK,GAAG,KAAA,KAAU;AAC7F,EAAA,MAAM,UAAA,GAAa,MAAM,OAAA,CAAQ,CAAA,EAAG,IAAI,aAAA,CAAc,OAAA,CAAQ,CAAC,CAAC,CAAA,yBAAA,CAA2B,CAAA;AAE3F,EAAA,OAAO,eAAe,gBAAA,GAAmB;AACrC,IAAA,MAAM,QAAA,GAAW,MAAM,KAAA,CAAM,OAAA,CAAQ,UAAA,EAAY;AAAA,MAC7C,MAAA,EAAQ;AAAA,KACX,CAAA;AAED,IAAA,OAAO,KAAA,CAAM,QAAQ,QAAQ,CAAA;AAAA,EACjC,CAAA;AACJ,CAAC,CAAA;;;ACEM,IAAM,kBAAkB,UAAA,EAA6B,CAAE,CAAC,GAAA,EAAK,KAAK,KAAA,KAAU;AAC/E,EAAA,MAAM,UAAA,GAAa,MAAM,OAAA,CAAQ,CAAA,EAAG,IAAI,aAAA,CAAc,MAAA,CAAO,CAAC,CAAC,CAAA,uBAAA,CAAyB,CAAA;AASxF,EAAA,OAAO,eAAe,SAAS,WAAA,EAAqB;AAChD,IAAA,IAAI,CAAC,WAAA,EAAa,MAAM,IAAI,aAAa,qBAAqB,CAAA;AAC9D,IAAA,IAAI,WAAA,CAAY,UAAA,CAAW,GAAG,CAAA,EAAG;AAC7B,MAAA,IAAI,IAAI,QAAA,IAAY,IAAA,gBAAoB,IAAA,GAAO,WAAA,CAAY,MAAM,CAAC,CAAA;AAAA,IACtE;AAEA,IAAA,MAAM,MAAA,GAAS;AAAA,MACX,KAAA,EAAO,WAAA;AAAA,MACP,WAAA,EAAa,GAAA;AAAA,MACb,UAAU,GAAA,CAAI,QAAA;AAAA,MACd,MAAM,GAAA,CAAI,IAAA;AAAA,MACV,MAAA,EAAQ;AAAA,KACZ;AAEA,IAAA,MAAM,kBAAkB,KAAA,CAAM,SAAA,CAAU,IAAA,CAAK,SAAA,CAAU,MAAM,CAAC,CAAA;AAC9D,IAAA,IAAI,CAAC,eAAA,EAAiB,MAAM,IAAI,aAAa,2BAA2B,CAAA;AAExE,IAAA,MAAM,eAAA,GAAkB,IAAI,GAAA,CAAI,UAAU,CAAA;AAC1C,IAAA,eAAA,CAAgB,YAAA,CAAa,MAAA,CAAO,QAAA,EAAU,eAAe,CAAA;AAE7D,IAAA,MAAM,QAAA,GAAW,MAAM,KAAA,CAAM,OAAA;AAAA,MACzB,KAAA,CAAM,OAAA,CAAQ,eAAA,CAAgB,QAAA,EAAS,EAAG;AAAA,QACtC,MAAA,EAAQ;AAAA,OACX;AAAA,KACL;AAEA,IAAA,OAAO,KAAA,CAAM,OAAA,CAAQ,QAAA,EAAU,CAAC,MAAA,KAAW;AACvC,MAAA,IAAI,MAAA,CAAO,KAAA,IAAS,MAAA,CAAO,KAAA,CAAM,IAAA,IAAQ,GAAA;AACrC,QAAA,MAAM,IAAI,YAAA,CAAa,MAAA,CAAO,MAAM,OAAA,EAAS,MAAA,CAAO,MAAM,IAAI,CAAA;AAElE,MAAA,OAAO,MAAA,CAAO,IAAA;AAAA,IAClB,CAAC,CAAA;AAAA,EACL,CAAA;AACJ,CAAC,CAAA;;;AC/BM,IAAM,wBAAwB,UAAA,EAAmC,CAAE,CAAC,GAAA,EAAK,KAAK,KAAA,KAAU;AAC3F,EAAA,MAAM,UAAA,GAAa;AAAA,IACf,CAAA,CAAA,cAAmB,KAAA,CAAM,OAAA,CAAQ,CAAA,EAAG,IAAI,aAAA,CAAc,IAAA,CAAK,CAAC,CAAC,CAAA,qBAAA,CAAuB,CAAA;AAAA,IACpF,CAAA,CAAA,eAAoB,KAAA,CAAM,OAAA,CAAQ,CAAA,EAAG,IAAI,aAAA,CAAc,IAAA,CAAK,CAAC,CAAC,CAAA,mBAAA,CAAqB;AAAA,GACvF;AAWA,EAAA,OAAO,eAAe,cAAA,CAClB,OAAA,EACA,SAAA,EACA,IAAA,GAAA,CAAA,aACF;AAjDN,IAAA,IAAA,EAAA,EAAA,EAAA;AAkDQ,IAAA,IAAI,CAAC,OAAA,CAAQ,OAAA,EAAS,MAAM,IAAI,aAAa,yBAAyB,CAAA;AACtE,IAAA,IAAI,CAAC,aAAa,SAAA,CAAU,MAAA,KAAW,GAAG,MAAM,IAAI,aAAa,oBAAoB,CAAA;AAErF,IAAA,MAAM,SAAA,GAAY,KAAK,GAAA,EAAI;AAC3B,IAAA,MAAM,QAAA,GAAW,UAAU,QAAA,EAAS;AAEpC,IAAA,MAAM,OAAA,GAAU;AAAA,MACZ,SAAS,OAAA,CAAQ,OAAA;AAAA,MACjB,SAAA,EAAW,OAAA,CAAQ,SAAA,GACb,IAAA,CAAK,SAAA,CAAU;AAAA,QACX,IAAA,EAAM,CAAA;AAAA,QACN,IAAA,EAAM,IAAA,CAAK,SAAA,CAAU,OAAA,CAAQ,SAAS;AAAA,OACzC,CAAA,GACD;AAAA,KACV;AAEA,IAAA,MAAM,QAAA,GAAW,QAAQ,SAAA,GACnB;AAAA,MACI,EAAA,EAAI;AAAA,QACA,IAAA,EAAM;AAAA,UACF,EAAA,EAAI,CAAA;AAAA,UACJ,EAAA,EAAI,QAAQ,SAAA,CAAU,EAAA;AAAA,UACtB,EAAA,EAAI,QAAQ,SAAA,CAAU;AAAA,SAC1B;AAAA,QACA,IAAA,EAAM;AAAA,UACF,EAAA,EAAI,CAAA;AAAA,UACJ,EAAA,EAAI,QAAQ,SAAA,CAAU,EAAA;AAAA,UACtB,EAAA,EAAI,QAAQ,SAAA,CAAU;AAAA,SAC1B;AAAA,QACA,KAAA,EAAO,QAAQ,SAAA,CAAU;AAAA;AAC7B,KACJ,GACA,IAAA;AAEN,IAAA,IAAI,MAAA;AACJ,IAAA,IAAI,IAAA,KAAA,CAAA,aAA0B;AAC1B,MAAA,MAAA,GAAS;AAAA,QACL,KAAA,EAAO,SAAA,CAAU,GAAA,CAAI,CAAC,QAAA,KAAU;AAvFhD,UAAA,IAAAG,GAAAA;AAuFoD,UAAA,OAAA;AAAA,YAChC,QAAA;AAAA,YACA,KAAA,EAAO,QAAA;AAAA,YACP,GAAA,EAAA,CAAKA,GAAAA,GAAA,OAAA,CAAQ,GAAA,KAAR,OAAAA,GAAAA,GAAe;AAAA,WACxB;AAAA,QAAA,CAAE,CAAA;AAAA,QACF,MAAM,GAAA,CAAI,IAAA;AAAA,QACV,GAAA,EAAA,CAAK,EAAA,GAAA,OAAA,CAAQ,GAAA,KAAR,IAAA,GAAA,EAAA,GAAe,CAAA;AAAA,QACpB,OAAA,EAAS,GAAA;AAAA,QACT,UAAU,SAAA,CAAU,MAAA;AAAA,QACpB,OAAA,EAAS,IAAA,CAAK,SAAA,CAAU,OAAO,CAAA;AAAA,QAC/B,QAAA,EAAU,IAAA,CAAK,SAAA,CAAU,QAAQ;AAAA,OACrC;AAAA,IACJ,CAAA,MAAO;AACH,MAAA,MAAA,GAAS;AAAA,QACL,KAAA,EAAO,SAAA,CAAU,GAAA,CAAI,CAAC,QAAA,KAAU;AArGhD,UAAA,IAAAA,GAAAA;AAqGoD,UAAA,OAAA;AAAA,YAChC,QAAA;AAAA,YACA,IAAA,EAAM,QAAA;AAAA,YACN,GAAA,EAAA,CAAKA,GAAAA,GAAA,OAAA,CAAQ,GAAA,KAAR,OAAAA,GAAAA,GAAe;AAAA,WACxB;AAAA,QAAA,CAAE,CAAA;AAAA,QACF,GAAA,EAAA,CAAK,EAAA,GAAA,OAAA,CAAQ,GAAA,KAAR,IAAA,GAAA,EAAA,GAAe,CAAA;AAAA,QACpB,OAAA,EAAS,GAAA;AAAA,QACT,UAAU,SAAA,CAAU,MAAA;AAAA,QACpB,OAAA,EAAS,IAAA,CAAK,SAAA,CAAU,OAAO,CAAA;AAAA,QAC/B,QAAA,EAAU,IAAA,CAAK,SAAA,CAAU,QAAQ;AAAA,OACrC;AAAA,IACJ;AAEA,IAAA,MAAM,kBAAkB,KAAA,CAAM,SAAA,CAAU,IAAA,CAAK,SAAA,CAAU,MAAM,CAAC,CAAA;AAC9D,IAAA,IAAI,CAAC,eAAA,EAAiB,MAAM,IAAI,aAAa,0BAA0B,CAAA;AAEvE,IAAA,MAAM,WAAW,MAAM,KAAA,CAAM,OAAA,CAAQ,UAAA,CAAW,IAAI,CAAA,EAAG;AAAA,MACnD,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,IAAI,eAAA,CAAgB;AAAA,QACtB,MAAA,EAAQ;AAAA,OACX;AAAA,KACJ,CAAA;AAED,IAAA,OAAO,KAAA,CAAM,QAAQ,QAAQ,CAAA;AAAA,EACjC,CAAA;AACJ,CAAC,CAAA;;;ACnHM,IAAM,sBAAsB,UAAA,EAAiC,CAAE,CAAC,GAAA,EAAK,KAAK,KAAA,KAAU;AACvF,EAAA,MAAM,UAAA,GAAa,MAAM,OAAA,CAAQ,CAAA,EAAG,IAAI,aAAA,CAAc,KAAA,CAAM,CAAC,CAAC,CAAA,eAAA,CAAiB,CAAA;AAU/E,EAAA,OAAO,eAAe,YAAA,CAAa,KAAA,GAAgB,GAAA,EAAK,OAAe,CAAA,EAAG;AACtE,IAAA,MAAM,MAAA,GAAS;AAAA,MACX,IAAA;AAAA,MACA,KAAA;AAAA,MACA,MAAM,GAAA,CAAI;AAAA,KACd;AAEA,IAAA,MAAM,kBAAkB,KAAA,CAAM,SAAA,CAAU,IAAA,CAAK,SAAA,CAAU,MAAM,CAAC,CAAA;AAC9D,IAAA,IAAI,CAAC,eAAA,EAAiB,MAAM,IAAI,aAAa,0BAA0B,CAAA;AAEvE,IAAA,MAAM,QAAA,GAAW,MAAM,KAAA,CAAM,OAAA,CAAQ,KAAA,CAAM,OAAA,CAAQ,UAAA,EAAY,EAAE,MAAA,EAAQ,eAAA,EAAiB,CAAA,EAAG;AAAA,MACzF,MAAA,EAAQ;AAAA,KACX,CAAA;AAED,IAAA,OAAO,KAAA,CAAM,QAAQ,QAAQ,CAAA;AAAA,EACjC,CAAA;AACJ,CAAC,CAAA;;;AC/BM,IAAM,uBAAuB,UAAA,EAAkC,CAAE,CAAC,GAAA,EAAK,KAAK,KAAA,KAAU;AACzF,EAAA,MAAM,UAAA,GAAa,MAAM,OAAA,CAAQ,CAAA,EAAG,IAAI,aAAA,CAAc,OAAA,CAAQ,CAAC,CAAC,CAAA,6BAAA,CAA+B,CAAA;AAU/F,EAAA,OAAO,eAAe,aAAA,CAAc,KAAA,GAAgB,GAAA,EAAO,OAAe,CAAA,EAAG;AACzE,IAAA,MAAM,MAAA,GAAS;AAAA,MACX,UAAA,EAAY,CAAA;AAAA,MACZ,IAAA;AAAA,MACA,KAAA;AAAA,MACA,WAAA,EAAa,GAAA;AAAA,MACb,UAAA,EAAY,CAAA;AAAA,MACZ,MAAM,GAAA,CAAI;AAAA,KACd;AAEA,IAAA,MAAM,kBAAkB,KAAA,CAAM,SAAA,CAAU,IAAA,CAAK,SAAA,CAAU,MAAM,CAAC,CAAA;AAC9D,IAAA,IAAI,CAAC,eAAA,EAAiB,MAAM,IAAI,aAAa,2BAA2B,CAAA;AAExE,IAAA,MAAM,QAAA,GAAW,MAAM,KAAA,CAAM,OAAA;AAAA,MACzB,KAAA,CAAM,QAAQ,UAAA,EAAY;AAAA,QACtB,MAAA,EAAQ;AAAA,OACX,CAAA;AAAA,MACD;AAAA,QACI,MAAA,EAAQ;AAAA;AACZ,KACJ;AAEA,IAAA,OAAO,KAAA,CAAM,QAAQ,QAAQ,CAAA;AAAA,EACjC,CAAA;AACJ,CAAC,CAAA;;;ACjCM,IAAM,sBAAsB,UAAA,EAAiC,CAAE,CAAC,GAAA,EAAK,GAAG,KAAA,KAAU;AACrF,EAAA,MAAM,UAAA,GAAa,MAAM,OAAA,CAAQ,CAAA,EAAG,IAAI,aAAA,CAAc,UAAA,CAAW,CAAC,CAAC,CAAA,mBAAA,CAAqB,CAAA;AAExF,EAAA,OAAO,eAAe,YAAA,GAAe;AACjC,IAAA,MAAM,QAAA,GAAW,MAAM,KAAA,CAAM,OAAA,CAAQ,UAAA,EAAY;AAAA,MAC7C,MAAA,EAAQ;AAAA,KACX,CAAA;AAED,IAAA,OAAO,KAAA,CAAM,QAAQ,QAAQ,CAAA;AAAA,EACjC,CAAA;AACJ,CAAC,CAAA;;;ACXM,IAAM,6BAA6B,UAAA,EAAwC,CAAE,CAAC,GAAA,EAAK,KAAK,KAAA,KAAU;AACrG,EAAA,MAAM,UAAA,GAAa,MAAM,OAAA,CAAQ,CAAA,EAAG,IAAI,aAAA,CAAc,KAAA,CAAM,CAAC,CAAC,CAAA,sBAAA,CAAwB,CAAA;AAOtF,EAAA,OAAO,eAAe,mBAAA,GAAsB;AACxC,IAAA,MAAM,MAAA,GAAS;AAAA,MACX,OAAA,EAAS,CAAA;AAAA,MACT,MAAM,GAAA,CAAI;AAAA,KACd;AAEA,IAAA,MAAM,kBAAkB,KAAA,CAAM,SAAA,CAAU,IAAA,CAAK,SAAA,CAAU,MAAM,CAAC,CAAA;AAC9D,IAAA,IAAI,CAAC,eAAA,EAAiB,MAAM,IAAI,aAAa,0BAA0B,CAAA;AAEvE,IAAA,MAAM,QAAA,GAAW,MAAM,KAAA,CAAM,OAAA,CAAQ,KAAA,CAAM,OAAA,CAAQ,UAAA,EAAY,EAAE,MAAA,EAAQ,eAAA,EAAiB,CAAA,EAAG;AAAA,MACzF,MAAA,EAAQ;AAAA,KACX,CAAA;AAED,IAAA,OAAO,KAAA,CAAM,QAAQ,QAAQ,CAAA;AAAA,EACjC,CAAA;AACJ,CAAC,CAAA;;;ACnBM,IAAM,2BAA2B,UAAA,EAAsC,CAAE,CAAC,GAAA,EAAK,MAAM,KAAA,KAAU;AAClG,EAAA,MAAM,UAAA,GAAa,MAAM,OAAA,CAAQ,CAAA,EAAG,IAAI,aAAA,CAAc,YAAA,CAAa,CAAC,CAAC,CAAA,+BAAA,CAAiC,CAAA;AAQtG,EAAA,OAAO,eAAe,iBAAA,GAAoB;AACtC,IAAA,MAAM,SAAS,EAAC;AAEhB,IAAA,MAAM,kBAAkB,KAAA,CAAM,SAAA,CAAU,IAAA,CAAK,SAAA,CAAU,MAAM,CAAC,CAAA;AAC9D,IAAA,IAAI,CAAC,eAAA,EAAiB,MAAM,IAAI,aAAa,0BAA0B,CAAA;AAEvE,IAAA,MAAM,QAAA,GAAW,MAAM,KAAA,CAAM,OAAA,CAAQ,KAAA,CAAM,OAAA,CAAQ,UAAA,EAAY,EAAE,MAAA,EAAQ,eAAA,EAAiB,CAAA,EAAG;AAAA,MACzF,MAAA,EAAQ;AAAA,KACX,CAAA;AAED,IAAA,OAAO,KAAA,CAAM,QAAQ,QAAQ,CAAA;AAAA,EACjC,CAAA;AACJ,CAAC,CAAA;;;ACxBM,IAAM,0BAA0B,UAAA,EAAqC,CAAE,CAAC,GAAA,EAAK,KAAK,KAAA,KAAU;AAC/F,EAAA,MAAM,UAAA,GAAa,MAAM,OAAA,CAAQ,CAAA,EAAG,IAAI,aAAA,CAAc,UAAA,CAAW,CAAC,CAAC,CAAA,mBAAA,CAAqB,CAAA;AAQxF,EAAA,OAAO,eAAe,gBAAA,GAAmB;AACrC,IAAA,MAAM,MAAA,GAAS;AAAA,MACX,OAAA,EAAS,CAAA;AAAA,MACT,SAAS,GAAA,CAAI;AAAA,KACjB;AAEA,IAAA,MAAM,kBAAkB,KAAA,CAAM,SAAA,CAAU,IAAA,CAAK,SAAA,CAAU,MAAM,CAAC,CAAA;AAC9D,IAAA,IAAI,CAAC,eAAA,EAAiB,MAAM,IAAI,aAAa,0BAA0B,CAAA;AAEvE,IAAA,MAAM,QAAA,GAAW,MAAM,KAAA,CAAM,OAAA,CAAQ,KAAA,CAAM,OAAA,CAAQ,UAAA,EAAY,EAAE,MAAA,EAAQ,eAAA,EAAiB,CAAA,EAAG;AAAA,MACzF,MAAA,EAAQ;AAAA,KACX,CAAA;AAED,IAAA,OAAO,KAAA,CAAM,QAAQ,QAAQ,CAAA;AAAA,EACjC,CAAA;AACJ,CAAC,CAAA;;;AClBM,IAAM,uBAAuB,UAAA,EAAkC,CAAE,CAAC,GAAA,EAAK,KAAK,KAAA,KAAU;AACzF,EAAA,MAAM,UAAA,GAAa,MAAM,OAAA,CAAQ,CAAA,EAAG,IAAI,aAAA,CAAc,OAAA,CAAQ,CAAC,CAAC,CAAA,uBAAA,CAAyB,CAAA;AAUzF,EAAA,OAAO,eAAe,aAAA,CAAc,KAAA,GAAgB,EAAA,EAAI,OAAe,CAAA,EAAG;AACtE,IAAA,MAAM,MAAA,GAAS;AAAA,MACX,IAAA;AAAA,MACA,OAAA,EAAS,GAAA;AAAA,MACT,KAAA;AAAA,MACA,MAAM,GAAA,CAAI;AAAA,KACd;AAEA,IAAA,MAAM,kBAAkB,KAAA,CAAM,SAAA,CAAU,IAAA,CAAK,SAAA,CAAU,MAAM,CAAC,CAAA;AAC9D,IAAA,IAAI,CAAC,eAAA,EAAiB,MAAM,IAAI,aAAa,0BAA0B,CAAA;AAEvE,IAAA,MAAM,QAAA,GAAW,MAAM,KAAA,CAAM,OAAA,CAAQ,KAAA,CAAM,OAAA,CAAQ,UAAA,EAAY,EAAE,MAAA,EAAQ,eAAA,EAAiB,CAAA,EAAG;AAAA,MACzF,MAAA,EAAQ;AAAA,KACX,CAAA;AAED,IAAA,OAAO,KAAA,CAAM,QAAQ,QAAQ,CAAA;AAAA,EACjC,CAAA;AACJ,CAAC,CAAA;;;AChBM,IAAM,uBAAuB,UAAA,EAAkC,CAAE,CAAC,GAAA,EAAK,MAAM,KAAA,KAAU;AAC1F,EAAA,MAAM,UAAA,GAAa,MAAM,OAAA,CAAQ,CAAA,EAAG,IAAI,aAAA,CAAc,OAAA,CAAQ,CAAC,CAAC,CAAA,6BAAA,CAA+B,CAAA;AAS/F,EAAA,OAAO,eAAe,cAAc,QAAA,EAAkB;AAClD,IAAA,MAAM,MAAA,GAAS;AAAA,MACX,GAAA,EAAK;AAAA,KACT;AAEA,IAAA,MAAM,kBAAkB,KAAA,CAAM,SAAA,CAAU,IAAA,CAAK,SAAA,CAAU,MAAM,CAAC,CAAA;AAC9D,IAAA,IAAI,CAAC,eAAA,EAAiB,MAAM,IAAI,aAAa,0BAA0B,CAAA;AAEvE,IAAA,MAAM,QAAA,GAAW,MAAM,KAAA,CAAM,OAAA,CAAQ,UAAA,EAAY;AAAA,MAC7C,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,IAAI,eAAA,CAAgB;AAAA,QACtB,MAAA,EAAQ;AAAA,OACX;AAAA,KACJ,CAAA;AAED,IAAA,OAAO,KAAA,CAAM,QAAQ,QAAQ,CAAA;AAAA,EACjC,CAAA;AACJ,CAAC,CAAA;;;AC/BM,IAAM,wBAAwB,UAAA,EAAmC,CAAE,CAAC,GAAA,EAAK,GAAG,KAAA,KAAU;AACzF,EAAA,MAAM,UAAA,GAAa,MAAM,OAAA,CAAQ,CAAA,EAAG,IAAI,aAAA,CAAc,OAAA,CAAQ,CAAC,CAAC,CAAA,6BAAA,CAA+B,CAAA;AAU/F,EAAA,OAAO,eAAe,eAAe,OAAA,EAAiC;AAlC1E,IAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA;AAmCQ,IAAA,MAAM,MAAA,GAAS;AAAA,MACX,oBAAA,EAAsB,CAAA;AAAA,MACtB,KAAA,EAAA,CAAO,EAAA,GAAA,OAAA,IAAA,IAAA,GAAA,MAAA,GAAA,OAAA,CAAS,KAAA,KAAT,IAAA,GAAA,EAAA,GAAkB,EAAA;AAAA,MACzB,eAAA,EAAA,CAAiB,EAAA,GAAA,OAAA,IAAA,IAAA,GAAA,MAAA,GAAA,OAAA,CAAS,aAAA,KAAT,IAAA,GAAA,EAAA,GAA0B,EAAA;AAAA,MAC3C,IAAA,EAAA,CAAM,EAAA,GAAA,OAAA,IAAA,IAAA,GAAA,MAAA,GAAA,OAAA,CAAS,IAAA,KAAT,IAAA,GAAA,EAAA,GAAiB;AAAA,KAC3B;AAEA,IAAA,MAAM,kBAAkB,KAAA,CAAM,SAAA,CAAU,IAAA,CAAK,SAAA,CAAU,MAAM,CAAC,CAAA;AAC9D,IAAA,IAAI,CAAC,eAAA,EAAiB,MAAM,IAAI,aAAa,0BAA0B,CAAA;AAEvE,IAAA,MAAM,QAAA,GAAW,MAAM,KAAA,CAAM,OAAA,CAAQ,UAAA,EAAY;AAAA,MAC7C,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,IAAI,eAAA,CAAgB;AAAA,QACtB,MAAA,EAAQ;AAAA,OACX;AAAA,KACJ,CAAA;AAED,IAAA,OAAO,KAAA,CAAM,QAAQ,QAAQ,CAAA;AAAA,EACjC,CAAA;AACJ,CAAC,CAAA;;;ACpDM,IAAM,iBAAA,GAAoB,UAAA,EAAW,CAAE,CAAC,GAAG,GAAA,KAAQ;AACtD,EAAA,OAAO,MAAM,GAAA;AACjB,CAAC,CAAA;;;ACFM,IAAM,gBAAA,GAAmB,UAAA,EAAW,CAAE,CAAC,GAAG,GAAA,KAAQ;AAIrD,EAAA,OAAO,SAAS,SAAA,GAAY;AACxB,IAAA,OAAO,GAAA,CAAI,MAAA;AAAA,EACf,CAAA;AACJ,CAAC,CAAA;;;ACDM,IAAM,4BAA4B,UAAA,EAAuC,CAAE,CAAC,GAAA,EAAK,KAAK,KAAA,KAAU;AACnG,EAAA,MAAM,UAAA,GAAa,MAAM,OAAA,CAAQ,CAAA,EAAG,IAAI,aAAA,CAAc,YAAA,CAAa,CAAC,CAAC,CAAA,qBAAA,CAAuB,CAAA;AAS5F,EAAA,OAAO,eAAe,mBAAmB,cAAA,EAAwB;AAC7D,IAAA,MAAM,MAAA,GAAS;AAAA,MACX,cAAA;AAAA,MACA,OAAA,EAAS,CAAA;AAAA,MACT,MAAM,GAAA,CAAI;AAAA,KACd;AAEA,IAAA,MAAM,kBAAkB,KAAA,CAAM,SAAA,CAAU,IAAA,CAAK,SAAA,CAAU,MAAM,CAAC,CAAA;AAC9D,IAAA,IAAI,CAAC,eAAA,EAAiB,MAAM,IAAI,aAAa,0BAA0B,CAAA;AAEvE,IAAA,MAAM,QAAA,GAAW,MAAM,KAAA,CAAM,OAAA,CAAQ,KAAA,CAAM,OAAA,CAAQ,UAAA,EAAY,EAAE,MAAA,EAAQ,eAAA,EAAiB,CAAA,EAAG;AAAA,MACzF,MAAA,EAAQ;AAAA,KACX,CAAA;AAED,IAAA,OAAO,KAAA,CAAM,QAAQ,QAAQ,CAAA;AAAA,EACjC,CAAA;AACJ,CAAC,CAAA;ACjBM,IAAM,0BAA0B,UAAA,EAAqC,CAAE,CAAC,GAAA,EAAK,KAAK,KAAA,KAAU;AAC/F,EAAA,MAAM,UAAA,GAAa,MAAM,OAAA,CAAQ,CAAA,EAAG,IAAI,aAAA,CAAc,OAAA,CAAQ,CAAC,CAAC,CAAA,0BAAA,CAA4B,CAAA;AAO5F,EAAA,OAAO,eAAe,gBAAA,GAAmB;AACrC,IAAA,MAAM,MAAA,GAAS;AAAA,MACX,MAAM,GAAA,CAAI;AAAA,KACd;AAEA,IAAA,MAAM,kBAAkB,KAAA,CAAM,SAAA,CAAU,IAAA,CAAK,SAAA,CAAU,MAAM,CAAC,CAAA;AAC9D,IAAA,IAAI,CAAC,eAAA,EAAiB,MAAM,IAAI,aAAa,0BAA0B,CAAA;AAEvE,IAAA,MAAM,QAAA,GAAW,MAAM,KAAA,CAAM,OAAA,CAAQ,KAAA,CAAM,OAAA,CAAQ,UAAA,EAAY,EAAE,MAAA,EAAQ,eAAA,EAAiB,CAAA,EAAG;AAAA,MACzF,MAAA,EAAQ;AAAA,KACX,CAAA;AAED,IAAA,OAAO,KAAA,CAAM,OAAA,CAAQ,QAAA,EAAU,CAAC,MAAA,KAAW;AACvC,MAAA,MAAM,OAAO,MAAA,CAAO,IAAA;AAEpB,MAAA,IAAI,OAAA,CAAQ,IAAA,CAAK,OAAO,CAAA,EAAG;AACvB,QAAA,KAAA,MAAW,MAAA,IAAU,KAAK,OAAA,EAAS;AAC/B,UAAA,IAAI,OAAO,MAAA,CAAO,MAAA,KAAW,QAAA,EAAU;AACnC,YAAA,MAAM,MAAA,GAAS,IAAA,CAAK,KAAA,CAAM,MAAA,CAAO,MAAM,CAAA;AACvC,YAAA,IAAI,MAAA,IAAU,OAAQ,MAAA,CAAgC,MAAA,KAAW,QAAA,EAAU;AACvE,cAAA,MAAA,CAAO,SAAU,MAAA,CAA8B,MAAA;AAAA,YACnD;AAAA,UACJ;AAAA,QACJ;AAAA,MACJ;AAEA,MAAA,OAAO,IAAA;AAAA,IACX,CAAC,CAAA;AAAA,EACL,CAAA;AACJ,CAAC,CAAA;;;ACVM,IAAM,kCAAkC,UAAA,EAA6C,CAAE,CAAC,GAAA,EAAK,KAAK,KAAA,KAAU;AAC/G,EAAA,MAAM,UAAA,GAAa,MAAM,OAAA,CAAQ,CAAA,EAAG,IAAI,aAAA,CAAc,MAAA,CAAO,CAAC,CAAC,CAAA,6BAAA,CAA+B,CAAA;AAO9F,EAAA,OAAO,eAAe,wBAAA,GAA2B;AAC7C,IAAA,MAAM,MAAA,GAAS;AAAA,MACX,MAAM,GAAA,CAAI;AAAA,KACd;AAEA,IAAA,MAAM,kBAAkB,KAAA,CAAM,SAAA,CAAU,IAAA,CAAK,SAAA,CAAU,MAAM,CAAC,CAAA;AAC9D,IAAA,IAAI,CAAC,eAAA,EAAiB,MAAM,IAAI,aAAa,0BAA0B,CAAA;AAEvE,IAAA,MAAM,QAAA,GAAW,MAAM,KAAA,CAAM,OAAA,CAAQ,KAAA,CAAM,OAAA,CAAQ,UAAA,EAAY,EAAE,MAAA,EAAQ,eAAA,EAAiB,CAAA,EAAG;AAAA,MACzF,MAAA,EAAQ;AAAA,KACX,CAAA;AAED,IAAA,OAAO,KAAA,CAAM,QAAQ,QAAQ,CAAA;AAAA,EACjC,CAAA;AACJ,CAAC,CAAA;;;ACvDM,IAAM,gCAAgC,UAAA,EAA2C,CAAE,CAAC,GAAA,EAAK,KAAK,KAAA,KAAU;AAC3G,EAAA,MAAM,UAAA,GAAa,MAAM,OAAA,CAAQ,CAAA,EAAG,IAAI,aAAA,CAAc,MAAA,CAAO,CAAC,CAAC,CAAA,qBAAA,CAAuB,CAAA;AAStF,EAAA,OAAO,eAAe,uBAAuB,QAAA,EAAkB;AAC3D,IAAA,MAAM,MAAA,GAAS;AAAA,MACX,GAAA,EAAK,QAAA;AAAA,MACL,MAAM,GAAA,CAAI;AAAA,KACd;AAEA,IAAA,MAAM,kBAAkB,KAAA,CAAM,SAAA,CAAU,IAAA,CAAK,SAAA,CAAU,MAAM,CAAC,CAAA;AAC9D,IAAA,IAAI,CAAC,eAAA,EAAiB,MAAM,IAAI,aAAa,0BAA0B,CAAA;AAEvE,IAAA,MAAM,QAAA,GAAW,MAAM,KAAA,CAAM,OAAA,CAAQ,KAAA,CAAM,OAAA,CAAQ,UAAA,EAAY,EAAE,MAAA,EAAQ,eAAA,EAAiB,CAAA,EAAG;AAAA,MACzF,MAAA,EAAQ;AAAA,KACX,CAAA;AAED,IAAA,OAAO,KAAA,CAAM,QAAQ,QAAQ,CAAA;AAAA,EACjC,CAAA;AACJ,CAAC,CAAA;;;ACTM,IAAM,+BAA+B,UAAA,EAA0C,CAAE,CAAC,GAAA,EAAK,KAAK,KAAA,KAAU;AACzG,EAAA,MAAM,UAAA,GAAa,MAAM,OAAA,CAAQ,CAAA,EAAG,IAAI,aAAA,CAAc,KAAA,CAAM,CAAC,CAAC,CAAA,2BAAA,CAA6B,CAAA;AAU3F,EAAA,OAAO,eAAe,qBAAA,CAAsB,OAAA,EAAuC,OAAA,EAAiB;AAtCxG,IAAA,IAAA,EAAA,EAAA,EAAA;AAuCQ,IAAA,MAAM,MAAA,GAAS;AAAA,MACX,IAAA,EAAM,OAAA;AAAA,MACN,IAAA,EAAA,CAAM,EAAA,GAAA,OAAA,CAAQ,IAAA,KAAR,IAAA,GAAA,EAAA,GAAgB,CAAA;AAAA,MACtB,KAAA,EAAA,CAAO,EAAA,GAAA,OAAA,CAAQ,KAAA,KAAR,IAAA,GAAA,EAAA,GAAiB,EAAA;AAAA,MACxB,MAAM,GAAA,CAAI;AAAA,KACd;AAEA,IAAA,MAAM,kBAAkB,KAAA,CAAM,SAAA,CAAU,IAAA,CAAK,SAAA,CAAU,MAAM,CAAC,CAAA;AAC9D,IAAA,IAAI,CAAC,eAAA,EAAiB,MAAM,IAAI,aAAa,0BAA0B,CAAA;AAEvE,IAAA,MAAM,QAAA,GAAW,MAAM,KAAA,CAAM,OAAA,CAAQ,KAAA,CAAM,OAAA,CAAQ,UAAA,EAAY,EAAE,MAAA,EAAQ,eAAA,EAAiB,CAAA,EAAG;AAAA,MACzF,MAAA,EAAQ;AAAA,KACX,CAAA;AAED,IAAA,OAAO,KAAA,CAAM,QAAQ,QAAQ,CAAA;AAAA,EACjC,CAAA;AACJ,CAAC,CAAA;ACjCM,IAAM,sBAAsB,UAAA,EAA8B,CAAE,CAAC,GAAA,EAAK,GAAG,KAAA,KAAU;AAClF,EAAA,MAAM,UAAA,GAAa,MAAM,OAAA,CAAQ,CAAA,EAAG,IAAI,aAAA,CAAc,KAAA,CAAM,CAAC,CAAC,CAAA,mBAAA,CAAqB,CAAA;AASnF,EAAA,OAAO,eAAe,aAAa,OAAA,EAA4B;AAC3D,IAAA,MAAM,QAAA,GAAWH,YAAU,OAAO,CAAA;AAElC,IAAA,MAAM,MAAA,GAAS;AAAA,MACX,YAAY,IAAA,CAAK,SAAA;AAAA,QACb,QAAA,CAAS,MAAA,CAA+B,CAAC,GAAA,EAAK,EAAA,KAAO;AACjD,UAAA,GAAA,CAAI,EAAE,CAAA,GAAI,CAAA;AACV,UAAA,OAAO,GAAA;AAAA,QACX,CAAA,EAAG,EAAE;AAAA;AACT,KACJ;AAEA,IAAA,MAAM,kBAAkB,KAAA,CAAM,SAAA,CAAU,IAAA,CAAK,SAAA,CAAU,MAAM,CAAC,CAAA;AAC9D,IAAA,IAAI,CAAC,eAAA,EAAiB,MAAM,IAAI,aAAa,2BAA2B,CAAA;AAExE,IAAA,MAAM,QAAA,GAAW,MAAM,KAAA,CAAM,OAAA,CAAQ,UAAA,EAAY;AAAA,MAC7C,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,IAAI,eAAA,CAAgB;AAAA,QACtB,MAAA,EAAQ;AAAA,OACX;AAAA,KACJ,CAAA;AAED,IAAA,OAAO,KAAA,CAAM,QAAQ,QAAQ,CAAA;AAAA,EACjC,CAAA;AACJ,CAAC,CAAA;;;ACnBM,IAAM,+BAA+B,UAAA,EAA0C,CAAE,CAAC,GAAA,EAAK,GAAG,KAAA,KAAU;AACvG,EAAA,MAAM,UAAA,GAAa,MAAM,OAAA,CAAQ,CAAA,EAAG,IAAI,aAAA,CAAc,KAAA,CAAM,CAAC,CAAC,CAAA,2BAAA,CAA6B,CAAA;AAS3F,EAAA,OAAO,eAAe,sBAAsB,OAAA,EAAuC;AA/CvF,IAAA,IAAA,EAAA,EAAA,EAAA;AAgDQ,IAAA,MAAM,MAAA,GAAS;AAAA,MACX,MAAM,OAAA,CAAQ,OAAA;AAAA,MACd,MAAA,EAAA,CAAQ,EAAA,GAAA,OAAA,CAAQ,MAAA,KAAR,IAAA,GAAA,EAAA,GAAkB,EAAA;AAAA,MAC1B,KAAA,EAAA,CAAO,EAAA,GAAA,OAAA,CAAQ,KAAA,KAAR,IAAA,GAAA,EAAA,GAAiB;AAAA,KAC5B;AAEA,IAAA,MAAM,kBAAkB,KAAA,CAAM,SAAA,CAAU,IAAA,CAAK,SAAA,CAAU,MAAM,CAAC,CAAA;AAC9D,IAAA,IAAI,CAAC,eAAA,EAAiB,MAAM,IAAI,aAAa,0BAA0B,CAAA;AAEvE,IAAA,MAAM,QAAA,GAAW,MAAM,KAAA,CAAM,OAAA,CAAQ,KAAA,CAAM,OAAA,CAAQ,UAAA,EAAY,EAAE,MAAA,EAAQ,eAAA,EAAiB,CAAA,EAAG;AAAA,MACzF,MAAA,EAAQ;AAAA,KACX,CAAA;AAED,IAAA,OAAO,KAAA,CAAM,OAAA,CAAQ,QAAA,EAAU,CAAC,MAAA,KAAW;AACvC,MAAA,MAAM,OAAO,MAAA,CAAO,IAAA;AACpB,MAAA,MAAM,KAAA,GAAQ,KAAK,SAAA,CAAU,KAAA;AAG7B,MAAA,IAAI,OAAO,KAAA,CAAM,MAAA,IAAU,QAAA,EAAU;AACjC,QAAA,MAAMI,OAAAA,GAAS,IAAA,CAAK,KAAA,CAAM,KAAA,CAAM,MAAM,CAAA;AACtC,QAAA,IAAI,OAAOA,OAAAA,CAAO,KAAA,IAAS,QAAA,EAAU;AACjC,UAAAA,OAAAA,CAAO,KAAA,GAAQ,IAAA,CAAK,KAAA,CAAMA,QAAO,KAAK,CAAA;AAAA,QAC1C;AAEA,QAAA,KAAA,CAAM,MAAA,GAASA,OAAAA;AAAA,MACnB;AAEA,MAAA,OAAO,IAAA;AAAA,IACX,CAAC,CAAA;AAAA,EACL,CAAA;AACJ,CAAC,CAAA;;;ACpCM,IAAM,+BAA+B,UAAA,EAA0C,CAAE,CAAC,GAAA,EAAK,GAAG,KAAA,KAAU;AACvG,EAAA,MAAM,UAAA,GAAa,MAAM,OAAA,CAAQ,CAAA,EAAG,IAAI,aAAA,CAAc,KAAA,CAAM,CAAC,CAAC,CAAA,uBAAA,CAAyB,CAAA;AASvF,EAAA,OAAO,eAAe,sBAAsB,OAAA,EAAwC;AApDxF,IAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA;AAqDQ,IAAA,MAAM,MAAA,GAAS;AAAA,MACX,KAAA,EAAA,CAAO,EAAA,GAAA,OAAA,IAAA,IAAA,GAAA,MAAA,GAAA,OAAA,CAAS,KAAA,KAAT,IAAA,GAAA,EAAA,GAAkB,CAAA;AAAA,MACzB,IAAA,EAAA,CAAM,EAAA,GAAA,OAAA,IAAA,IAAA,GAAA,MAAA,GAAA,OAAA,CAAS,IAAA,KAAT,IAAA,GAAA,EAAA,GAAiB,CAAA;AAAA,MACvB,UAAA,EAAA,CAAY,EAAA,GAAA,OAAA,IAAA,IAAA,GAAA,MAAA,GAAA,OAAA,CAAS,UAAA,KAAT,IAAA,GAAA,EAAA,GAAuB,EAAA;AAAA,MACnC,MAAA,EAAA,CAAQ,EAAA,GAAA,OAAA,IAAA,IAAA,GAAA,MAAA,GAAA,OAAA,CAAS,MAAA,KAAT,IAAA,GAAA,EAAA,GAAmB,EAAA;AAAA,MAC3B,WAAA,EAAa,IAAA;AAAA;AAAA,MACb,WAAA,EAAa,GAAA;AAAA,MACb,kBAAA,EAAoB;AAAA,KACxB;AAEA,IAAA,MAAM,kBAAkB,KAAA,CAAM,SAAA,CAAU,IAAA,CAAK,SAAA,CAAU,MAAM,CAAC,CAAA;AAC9D,IAAA,IAAI,CAAC,eAAA,EAAiB,MAAM,IAAI,aAAa,0BAA0B,CAAA;AAEvE,IAAA,MAAM,QAAA,GAAW,MAAM,KAAA,CAAM,OAAA,CAAQ,KAAA,CAAM,OAAA,CAAQ,UAAA,EAAY,EAAE,MAAA,EAAQ,eAAA,EAAiB,CAAA,EAAG;AAAA,MACzF,MAAA,EAAQ;AAAA,KACX,CAAA;AAED,IAAA,OAAO,KAAA,CAAM,QAAQ,QAAQ,CAAA;AAAA,EACjC,CAAA;AACJ,CAAC,CAAA;;;AC5DM,IAAM,4BAA4B,UAAA,EAAuC,CAAE,CAAC,GAAA,EAAK,KAAK,KAAA,KAAU;AACnG,EAAA,MAAM,UAAA,GAAa,MAAM,OAAA,CAAQ,CAAA,EAAG,IAAI,aAAA,CAAc,KAAA,CAAM,CAAC,CAAC,CAAA,sBAAA,CAAwB,CAAA;AAStF,EAAA,OAAO,eAAe,mBAAmB,OAAA,EAAiB;AACtD,IAAA,MAAM,MAAA,GAAS;AAAA,MACX,IAAA,EAAM,OAAA;AAAA,MACN,MAAM,GAAA,CAAI;AAAA,KACd;AAEA,IAAA,MAAM,kBAAkB,KAAA,CAAM,SAAA,CAAU,IAAA,CAAK,SAAA,CAAU,MAAM,CAAC,CAAA;AAC9D,IAAA,IAAI,CAAC,eAAA,EAAiB,MAAM,IAAI,aAAa,0BAA0B,CAAA;AAEvE,IAAA,MAAM,QAAA,GAAW,MAAM,KAAA,CAAM,OAAA,CAAQ,KAAA,CAAM,OAAA,CAAQ,UAAA,EAAY,EAAE,MAAA,EAAQ,eAAA,EAAiB,CAAA,EAAG;AAAA,MACzF,MAAA,EAAQ;AAAA,KACX,CAAA;AAED,IAAA,OAAO,KAAA,CAAM,QAAQ,QAAQ,CAAA;AAAA,EACjC,CAAA;AACJ,CAAC,CAAA;;;ACCM,IAAM,0BAA0B,UAAA,EAAqC,CAAE,CAAC,GAAA,EAAK,MAAM,KAAA,KAAU;AAChG,EAAA,MAAM,UAAA,GAAa,MAAM,OAAA,CAAQ,CAAA,EAAG,IAAI,aAAA,CAAc,KAAA,CAAM,CAAC,CAAC,CAAA,qBAAA,CAAuB,CAAA;AASrF,EAAA,OAAO,eAAe,iBAAiB,OAAA,EAAkC;AAhD7E,IAAA,IAAA,EAAA;AAiDQ,IAAA,MAAM,MAAA,GAAS;AAAA,MACX,MAAM,OAAA,CAAQ,IAAA;AAAA,MACd,WAAA,EAAa,GAAA;AAAA,MACb,kBAAA,EAAoB,GAAA;AAAA,MACpB,KAAA,EAAA,CAAO,EAAA,GAAA,OAAA,CAAQ,UAAA,KAAR,IAAA,GAAA,EAAA,GAAsB;AAAA,KACjC;AAEA,IAAA,MAAM,kBAAkB,KAAA,CAAM,SAAA,CAAU,IAAA,CAAK,SAAA,CAAU,MAAM,CAAC,CAAA;AAC9D,IAAA,IAAI,CAAC,eAAA,EAAiB,MAAM,IAAI,aAAa,0BAA0B,CAAA;AAEvE,IAAA,MAAM,QAAA,GAAW,MAAM,KAAA,CAAM,OAAA,CAAQ,KAAA,CAAM,OAAA,CAAQ,UAAA,EAAY,EAAE,MAAA,EAAQ,eAAA,EAAiB,CAAA,EAAG;AAAA,MACzF,MAAA,EAAQ;AAAA,KACX,CAAA;AAED,IAAA,OAAO,KAAA,CAAM,QAAQ,QAAQ,CAAA;AAAA,EACjC,CAAA;AACJ,CAAC,CAAA;AC1CM,IAAM,6BAA6B,UAAA,EAAwC,CAAE,CAAC,GAAA,EAAK,GAAG,KAAA,KAAU;AACnG,EAAA,MAAM,UAAA,GAAa,MAAM,OAAA,CAAQ,CAAA,EAAG,IAAI,aAAA,CAAc,OAAA,CAAQ,CAAC,CAAC,CAAA,yBAAA,CAA2B,CAAA;AAS3F,EAAA,OAAO,eAAe,oBAAoB,QAAA,EAA6B;AACnE,IAAA,MAAM,SAAA,GAAYJ,YAAU,QAAQ,CAAA;AAEpC,IAAA,MAAM,MAAA,GAAS;AAAA,MACX,mBAAA,EAAqB,SAAA,CAAU,GAAA,CAAI,CAAC,EAAA,KAAQ,EAAA,CAAG,QAAA,CAAS,IAAI,CAAA,GAAI,EAAA,GAAK,CAAA,EAAG,EAAE,CAAA,EAAA,CAAK;AAAA,KACnF;AAEA,IAAA,MAAM,kBAAkB,KAAA,CAAM,SAAA,CAAU,IAAA,CAAK,SAAA,CAAU,MAAM,CAAC,CAAA;AAC9D,IAAA,IAAI,CAAC,eAAA,EAAiB,MAAM,IAAI,aAAa,2BAA2B,CAAA;AAExE,IAAA,MAAM,QAAA,GAAW,MAAM,KAAA,CAAM,OAAA,CAAQ,KAAA,CAAM,OAAA,CAAQ,UAAA,EAAY,EAAE,MAAA,EAAQ,eAAA,EAAiB,CAAC,CAAA;AAE3F,IAAA,OAAO,KAAA,CAAM,QAAQ,QAAQ,CAAA;AAAA,EACjC,CAAA;AACJ,CAAC,CAAA;;;ACjCM,IAAM,gCAAgC,UAAA,EAA2C,CAAE,CAAC,GAAA,EAAK,KAAK,KAAA,KAAU;AAC3G,EAAA,MAAM,UAAA,GAAa,MAAM,OAAA,CAAQ,CAAA,EAAG,IAAI,aAAA,CAAc,YAAA,CAAa,CAAC,CAAC,CAAA,0BAAA,CAA4B,CAAA;AAQjG,EAAA,OAAO,eAAe,sBAAA,GAAyB;AAC3C,IAAA,MAAM,MAAA,GAAS;AAAA,MACX,MAAM,GAAA,CAAI;AAAA,KACd;AAEA,IAAA,MAAM,kBAAkB,KAAA,CAAM,SAAA,CAAU,IAAA,CAAK,SAAA,CAAU,MAAM,CAAC,CAAA;AAC9D,IAAA,IAAI,CAAC,eAAA,EAAiB,MAAM,IAAI,aAAa,0BAA0B,CAAA;AAEvE,IAAA,MAAM,QAAA,GAAW,MAAM,KAAA,CAAM,OAAA,CAAQ,KAAA,CAAM,OAAA,CAAQ,UAAA,EAAY,EAAE,MAAA,EAAQ,eAAA,EAAiB,CAAA,EAAG;AAAA,MACzF,MAAA,EAAQ;AAAA,KACX,CAAA;AAED,IAAA,OAAO,KAAA,CAAM,QAAQ,QAAQ,CAAA;AAAA,EACjC,CAAA;AACJ,CAAC,CAAA;;;ACtBM,IAAM,mBAAmB,UAAA,EAA8B,CAAE,CAAC,GAAA,EAAK,KAAK,KAAA,KAAU;AACjF,EAAA,MAAM,UAAA,GAAa,MAAM,OAAA,CAAQ,CAAA,EAAG,IAAI,aAAA,CAAc,KAAA,CAAM,CAAC,CAAC,CAAA,kBAAA,CAAoB,CAAA;AAOlF,EAAA,OAAO,eAAe,SAAA,GAAY;AAC9B,IAAA,MAAM,MAAA,GAAS;AAAA,MACX,MAAM,GAAA,CAAI;AAAA,KACd;AAEA,IAAA,MAAM,kBAAkB,KAAA,CAAM,SAAA,CAAU,IAAA,CAAK,SAAA,CAAU,MAAM,CAAC,CAAA;AAC9D,IAAA,IAAI,CAAC,eAAA,EAAiB,MAAM,IAAI,aAAa,2BAA2B,CAAA;AAExE,IAAA,MAAM,QAAA,GAAW,MAAM,KAAA,CAAM,OAAA,CAAQ,KAAA,CAAM,OAAA,CAAQ,UAAA,EAAY,EAAE,MAAA,EAAQ,eAAA,EAAiB,CAAC,CAAA;AAE3F,IAAA,OAAO,KAAA,CAAM,OAAA,CAAQ,QAAA,EAAU,CAAC,MAAA,KAAW;AACvC,MAAA,MAAM,OAAO,MAAA,CAAO,IAAA;AACpB,MAAA,MAAM,aAAA,GAAmC;AAAA,QACrC,SAAA,EAAW,IAAA,CAAK,KAAA,CAAM,IAAA,CAAK,SAAS,CAAA;AAAA,QACpC,SAAS,IAAA,CAAK,OAAA;AAAA,QACd,gBAAgB,IAAA,CAAK;AAAA,OACzB;AACA,MAAA,OAAO,aAAA;AAAA,IACX,CAAC,CAAA;AAAA,EACL,CAAA;AACJ,CAAC,CAAA;;;ACTM,IAAM,sBAAsB,UAAA,EAAiC,CAAE,CAAC,GAAA,EAAK,KAAK,KAAA,KAAU;AACvF,EAAA,MAAM,UAAA,GAAa,MAAM,OAAA,CAAQ,CAAA,EAAG,IAAI,aAAA,CAAc,WAAA,CAAY,CAAC,CAAC,CAAA,eAAA,CAAiB,CAAA;AAWrF,EAAA,OAAO,eAAe,YAAA,CAAa,OAAA,EAA2B,OAAA,EAAiB;AA9CnF,IAAA,IAAA,EAAA,EAAA,EAAA;AA+CQ,IAAA,MAAM,aAAA,GAAgB;AAAA,MAClB,QAAA,EAAU,OAAA;AAAA,MACV,UAAA,EAAY,CAAA;AAAA,MACZ,IAAA,EAAA,CAAM,EAAA,GAAA,OAAA,CAAQ,IAAA,KAAR,IAAA,GAAA,EAAA,GAAgB,CAAA;AAAA,MACtB,KAAA,EAAA,CAAO,EAAA,GAAA,OAAA,CAAQ,KAAA,KAAR,IAAA,GAAA,EAAA,GAAiB,EAAA;AAAA,MACxB,OAAA,EAAS,CAAA;AAAA,MACT,SAAA,EAAW,CAAA;AAAA,MACX,MAAM,GAAA,CAAI;AAAA,KACd;AAEA,IAAA,MAAM,kBAAkB,KAAA,CAAM,SAAA,CAAU,IAAA,CAAK,SAAA,CAAU,aAAa,CAAC,CAAA;AACrE,IAAA,IAAI,CAAC,eAAA,EAAiB,MAAM,IAAI,aAAa,0BAA0B,CAAA;AAEvE,IAAA,MAAM,QAAA,GAAW,MAAM,KAAA,CAAM,OAAA,CAAQ,KAAA,CAAM,OAAA,CAAQ,UAAA,EAAY,EAAE,MAAA,EAAQ,eAAA,EAAiB,CAAA,EAAG;AAAA,MACzF,MAAA,EAAQ;AAAA,KACX,CAAA;AAED,IAAA,OAAO,KAAA,CAAM,OAAA,CAAQ,QAAA,EAAU,CAAC,MAAA,KAAW;AACvC,MAAA,MAAM,OAAO,MAAA,CAAO,IAAA;AACpB,MAAA,IAAA,CAAK,KAAA,CAAM,OAAA,CAAQ,CAAC,IAAA,KAAS;AACzB,QAAA,IAAI,KAAK,SAAA,IAAA,CAAA,aAA6B;AAClC,UAAA,MAAM,aAAa,IAAA,CAAK,IAAA;AACxB,UAAA,IAAI,OAAO,UAAA,CAAW,MAAA,KAAW,QAAA,EAAU;AACvC,YAAA,UAAA,CAAW,MAAA,GAAS,IAAA,CAAK,KAAA,CAAM,UAAA,CAAW,MAAM,CAAA;AAAA,UACpD;AAAA,QACJ;AAAA,MACJ,CAAC,CAAA;AAED,MAAA,OAAO,IAAA;AAAA,IACX,CAAC,CAAA;AAAA,EACL,CAAA;AACJ,CAAC,CAAA;;;AC7CM,IAAM,yBAAyB,UAAA,EAAoC,CAAE,CAAC,GAAA,EAAK,KAAK,KAAA,KAAU;AAC7F,EAAA,MAAM,UAAA,GAAa;AAAA,IACf,CAAA,CAAA,cAAmB,KAAA,CAAM,OAAA,CAAQ,CAAA,EAAG,IAAI,aAAA,CAAc,WAAA,CAAY,CAAC,CAAC,CAAA,sBAAA,CAAwB,CAAA;AAAA,IAC5F,CAAA,CAAA,eAAoB,KAAA,CAAM,OAAA,CAAQ,CAAA,EAAG,IAAI,aAAA,CAAc,WAAA,CAAY,CAAC,CAAC,CAAA,uBAAA,CAAyB;AAAA,GAClG;AAWA,EAAA,OAAO,eAAe,eAAA,CAClB,OAAA,EACA,QAAA,EACA,IAAA,GAAA,CAAA,aACF;AApDN,IAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA;AAqDQ,IAAA,MAAM,aAAA,GAAgB,cAAA,CAAA;AAAA,MAClB,YAAY,IAAA,CAAK,SAAA;AAAA,QACb,IAAA,KAAA,CAAA,cACM;AAAA,UACI,GAAA,EAAK,QAAA;AAAA,UACL,UAAA,EAAY,CAAA;AAAA,UACZ,IAAA,EAAA,CAAM,EAAA,GAAA,OAAA,CAAQ,IAAA,KAAR,IAAA,GAAA,EAAA,GAAgB,CAAA;AAAA,UACtB,KAAA,EAAA,CAAO,EAAA,GAAA,OAAA,CAAQ,KAAA,KAAR,IAAA,GAAA,EAAA,GAAiB,EAAA;AAAA,UACxB,OAAA,EAAS,CAAA;AAAA,UACT,SAAA,EAAW;AAAA,SACf,GACA;AAAA,UACI,QAAA,EAAU,QAAA;AAAA,UACV,UAAA,EAAY,CAAA;AAAA,UACZ,IAAA,EAAA,CAAM,EAAA,GAAA,OAAA,CAAQ,IAAA,KAAR,IAAA,GAAA,EAAA,GAAgB,CAAA;AAAA,UACtB,KAAA,EAAA,CAAO,EAAA,GAAA,OAAA,CAAQ,KAAA,KAAR,IAAA,GAAA,EAAA,GAAiB,EAAA;AAAA,UACxB,OAAA,EAAS,CAAA;AAAA,UACT,SAAA,EAAW;AAAA;AACf;AACV,KAAA,EACI,IAAA,KAAA,CAAA,gBAA6B,EAAE,IAAA,EAAM,GAAA,CAAI,IAAA,EAAK,CAAA;AAGtD,IAAA,MAAM,kBAAkB,KAAA,CAAM,SAAA,CAAU,IAAA,CAAK,SAAA,CAAU,aAAa,CAAC,CAAA;AACrE,IAAA,IAAI,CAAC,eAAA,EAAiB,MAAM,IAAI,aAAa,0BAA0B,CAAA;AAEvE,IAAA,MAAM,QAAA,GAAW,MAAM,KAAA,CAAM,OAAA,CAAQ,KAAA,CAAM,OAAA,CAAQ,UAAA,CAAW,IAAI,CAAA,EAAG,EAAE,MAAA,EAAQ,eAAA,EAAiB,CAAA,EAAG;AAAA,MAC/F,MAAA,EAAQ;AAAA,KACX,CAAA;AAED,IAAA,OAAO,KAAA,CAAM,OAAA,CAAQ,QAAA,EAAU,CAAC,MAAA,KAAW;AACvC,MAAA,OAAO,IAAA,CAAK,KAAA,CAAM,MAAA,CAAO,IAAc,CAAA;AAAA,IAC3C,CAAC,CAAA;AAAA,EACL,CAAA;AACJ,CAAC,CAAA;;;ACtEM,IAAM,iBAAiB,UAAA,EAA4B,CAAE,CAAC,GAAA,EAAK,KAAK,KAAA,KAAU;AAC7E,EAAA,MAAM,UAAA,GAAa,MAAM,OAAA,CAAQ,CAAA,EAAG,IAAI,aAAA,CAAc,OAAA,CAAQ,CAAC,CAAC,CAAA,2BAAA,CAA6B,CAAA;AAO7F,EAAA,OAAO,eAAe,OAAA,GAAU;AAC5B,IAAA,MAAM,MAAA,GAAS;AAAA,MACX,MAAM,GAAA,CAAI;AAAA,KACd;AAEA,IAAA,MAAM,kBAAkB,KAAA,CAAM,SAAA,CAAU,IAAA,CAAK,SAAA,CAAU,MAAM,CAAC,CAAA;AAC9D,IAAA,IAAI,CAAC,eAAA,EAAiB,MAAM,IAAI,aAAa,0BAA0B,CAAA;AAEvE,IAAA,MAAM,QAAA,GAAW,MAAM,KAAA,CAAM,OAAA,CAAQ,KAAA,CAAM,OAAA,CAAQ,UAAA,EAAY,EAAE,MAAA,EAAQ,eAAA,EAAiB,CAAA,EAAG;AAAA,MACzF,MAAA,EAAQ;AAAA,KACX,CAAA;AAED,IAAA,OAAO,KAAA,CAAM,QAAQ,QAAQ,CAAA;AAAA,EACjC,CAAA;AACJ,CAAC,CAAA;;;ACrCM,IAAM,eAAA,GAAkB,UAAA,EAAW,CAAE,CAAC,GAAG,GAAA,KAAQ;AACpD,EAAA,OAAO,MAAM,GAAA,CAAI,GAAA;AACrB,CAAC,CAAA;;;ACWM,IAAM,gCAAgC,UAAA,EAA2C,CAAE,CAAC,GAAA,EAAK,KAAK,KAAA,KAAU;AAC3G,EAAA,MAAM,UAAA,GAAa,MAAM,OAAA,CAAQ,CAAA,EAAG,IAAI,aAAA,CAAc,KAAA,CAAM,CAAC,CAAC,CAAA,4BAAA,CAA8B,CAAA;AAW5F,EAAA,OAAO,eAAe,uBAAuB,OAAA,EAAiB;AAC1D,IAAA,MAAM,MAAA,GAAS;AAAA,MACX,IAAA,EAAM,OAAA;AAAA,MACN,MAAM,GAAA,CAAI;AAAA,KACd;AAEA,IAAA,MAAM,kBAAkB,KAAA,CAAM,SAAA,CAAU,IAAA,CAAK,SAAA,CAAU,MAAM,CAAC,CAAA;AAC9D,IAAA,IAAI,CAAC,eAAA,EAAiB,MAAM,IAAI,aAAa,0BAA0B,CAAA;AAEvE,IAAA,MAAM,QAAA,GAAW,MAAM,KAAA,CAAM,OAAA,CAAQ,KAAA,CAAM,OAAA,CAAQ,UAAA,EAAY,EAAE,MAAA,EAAQ,eAAA,EAAiB,CAAA,EAAG;AAAA,MACzF,MAAA,EAAQ;AAAA,KACX,CAAA;AAED,IAAA,OAAO,KAAA,CAAM,QAAQ,QAAQ,CAAA;AAAA,EACjC,CAAA;AACJ,CAAC,CAAA;;;AClCM,IAAM,6BAA6B,UAAA,EAAwC,CAAE,CAAC,GAAA,EAAK,KAAK,KAAA,KAAU;AACrG,EAAA,MAAM,UAAA,GAAa,MAAM,OAAA,CAAQ,CAAA,EAAG,IAAI,aAAA,CAAc,YAAA,CAAa,CAAC,CAAC,CAAA,oBAAA,CAAsB,CAAA;AAO3F,EAAA,OAAO,eAAe,mBAAA,GAAsB;AACxC,IAAA,MAAM,MAAA,GAAS;AAAA,MACX,MAAM,GAAA,CAAI;AAAA,KACd;AAEA,IAAA,MAAM,kBAAkB,KAAA,CAAM,SAAA,CAAU,IAAA,CAAK,SAAA,CAAU,MAAM,CAAC,CAAA;AAC9D,IAAA,IAAI,CAAC,eAAA,EAAiB,MAAM,IAAI,aAAa,0BAA0B,CAAA;AAEvE,IAAA,MAAM,QAAA,GAAW,MAAM,KAAA,CAAM,OAAA,CAAQ,KAAA,CAAM,OAAA,CAAQ,UAAA,EAAY,EAAE,MAAA,EAAQ,eAAA,EAAiB,CAAA,EAAG;AAAA,MACzF,MAAA,EAAQ;AAAA,KACX,CAAA;AAED,IAAA,OAAO,KAAA,CAAM,QAAQ,QAAQ,CAAA;AAAA,EACjC,CAAA;AACJ,CAAC,CAAA;;;ACxBM,IAAM,uBAAuB,UAAA,EAA+B,CAAE,CAAC,GAAA,EAAK,KAAK,KAAA,KAAU;AACtF,EAAA,MAAM,UAAA,GAAa,MAAM,OAAA,CAAQ,CAAA,EAAG,IAAI,aAAA,CAAc,KAAA,CAAM,CAAC,CAAC,CAAA,gBAAA,CAAkB,CAAA;AAShF,EAAA,OAAO,eAAe,cAAc,MAAA,EAAgB;AAChD,IAAA,IAAI,CAAC,MAAA,EAAQ,MAAM,IAAI,aAAa,iBAAiB,CAAA;AAErD,IAAA,MAAM,MAAA,GAAS;AAAA,MACX,OAAA,EAAS,MAAA;AAAA,MACT,MAAM,GAAA,CAAI;AAAA,KACd;AAEA,IAAA,MAAM,kBAAkB,KAAA,CAAM,SAAA,CAAU,IAAA,CAAK,SAAA,CAAU,MAAM,CAAC,CAAA;AAC9D,IAAA,IAAI,CAAC,eAAA,EAAiB,MAAM,IAAI,aAAa,2BAA2B,CAAA;AAExE,IAAA,MAAM,QAAA,GAAW,MAAM,KAAA,CAAM,OAAA,CAAQ,UAAA,EAAY;AAAA,MAC7C,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,IAAI,eAAA,CAAgB;AAAA,QACtB,MAAA,EAAQ;AAAA,OACX;AAAA,KACJ,CAAA;AAED,IAAA,OAAO,KAAA,CAAM,QAAQ,QAAQ,CAAA;AAAA,EACjC,CAAA;AACJ,CAAC,CAAA;;;ACXM,IAAM,+BAA+B,UAAA,EAA0C,CAAE,CAAC,GAAA,EAAK,GAAG,KAAA,KAAU;AACvG,EAAA,MAAM,UAAA,GAAa,MAAM,OAAA,CAAQ,CAAA,EAAG,IAAI,aAAA,CAAc,OAAA,CAAQ,CAAC,CAAC,CAAA,6BAAA,CAA+B,CAAA;AAU/F,EAAA,OAAO,eAAe,sBAAsB,OAAA,EAAuC;AApCvF,IAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA;AAqCQ,IAAA,MAAM,MAAA,GAAS;AAAA,MACX,YAAY,OAAA,CAAQ,SAAA;AAAA,MACpB,KAAA,EAAA,CAAO,EAAA,GAAA,OAAA,CAAQ,KAAA,KAAR,IAAA,GAAA,EAAA,GAAiB,GAAA;AAAA,MACxB,eAAA,EAAA,CAAiB,EAAA,GAAA,OAAA,CAAQ,cAAA,KAAR,IAAA,GAAA,EAAA,GAA0B,CAAA;AAAA,MAC3C,eAAA,EAAA,CAAiB,EAAA,GAAA,OAAA,CAAQ,aAAA,KAAR,IAAA,GAAA,EAAA,GAAyB,EAAA;AAAA,MAC1C,IAAA,EAAA,CAAM,EAAA,GAAA,OAAA,CAAQ,IAAA,KAAR,IAAA,GAAA,EAAA,GAAgB;AAAA,KAC1B;AAEA,IAAA,MAAM,kBAAkB,KAAA,CAAM,SAAA,CAAU,IAAA,CAAK,SAAA,CAAU,MAAM,CAAC,CAAA;AAC9D,IAAA,IAAI,CAAC,eAAA,EAAiB,MAAM,IAAI,aAAa,0BAA0B,CAAA;AAEvE,IAAA,MAAM,QAAA,GAAW,MAAM,KAAA,CAAM,OAAA,CAAQ,UAAA,EAAY;AAAA,MAC7C,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,IAAI,eAAA,CAAgB;AAAA,QACtB,MAAA,EAAQ;AAAA,OACX;AAAA,KACJ,CAAA;AAED,IAAA,OAAO,KAAA,CAAM,QAAQ,QAAQ,CAAA;AAAA,EACjC,CAAA;AACJ,CAAC,CAAA;;;AClDM,IAAM,eAAe,UAAA,EAA0B,CAAE,CAAC,GAAA,EAAK,GAAG,KAAA,KAAU;AACvE,EAAA,MAAM,UAAA,GAAa,MAAM,OAAA,CAAQ,CAAA,EAAG,IAAI,aAAA,CAAc,MAAA,CAAO,CAAC,CAAC,CAAA,mBAAA,CAAqB,CAAA;AASpF,EAAA,OAAO,eAAe,MAAM,MAAA,EAA2B;AACnD,IAAA,IAAI,OAAO,MAAA,IAAU,QAAA,EAAU,MAAA,GAAS,CAAC,MAAM,CAAA;AAE/C,IAAA,MAAM,MAAA,GAAS;AAAA,MACX,IAAA,EAAM;AAAA,KACV;AAEA,IAAA,MAAM,kBAAkB,KAAA,CAAM,SAAA,CAAU,IAAA,CAAK,SAAA,CAAU,MAAM,CAAC,CAAA;AAC9D,IAAA,IAAI,CAAC,eAAA,EAAiB,MAAM,IAAI,aAAa,0BAA0B,CAAA;AAEvE,IAAA,MAAM,QAAA,GAAW,MAAM,KAAA,CAAM,OAAA,CAAQ,UAAA,EAAY;AAAA,MAC7C,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,IAAI,eAAA,CAAgB;AAAA,QACtB,MAAA,EAAQ;AAAA,OACX;AAAA,KACJ,CAAA;AAED,IAAA,OAAO,KAAA,CAAM,QAAQ,QAAQ,CAAA;AAAA,EACjC,CAAA;AACJ,CAAC,CAAA;;;AC1BM,IAAM,6BAA6B,UAAA,EAAwC,CAAE,CAAC,GAAA,EAAK,KAAK,KAAA,KAAU;AACrG,EAAA,MAAM,UAAA,GAAa,MAAM,OAAA,CAAQ,CAAA,EAAG,IAAI,aAAA,CAAc,aAAA,CAAc,CAAC,CAAC,CAAA,sBAAA,CAAwB,CAAA;AAO9F,EAAA,OAAO,eAAe,mBAAA,GAAsB;AACxC,IAAA,MAAM,MAAA,GAAS;AAAA,MACX,OAAA,EAAS,CAAA;AAAA,MACT,IAAA,EAAM,CAAA;AAAA,MACN,MAAM,GAAA,CAAI;AAAA,KACd;AAEA,IAAA,MAAM,kBAAkB,KAAA,CAAM,SAAA,CAAU,IAAA,CAAK,SAAA,CAAU,MAAM,CAAC,CAAA;AAC9D,IAAA,IAAI,CAAC,eAAA,EAAiB,MAAM,IAAI,aAAa,0BAA0B,CAAA;AAEvE,IAAA,MAAM,QAAA,GAAW,MAAM,KAAA,CAAM,OAAA,CAAQ,KAAA,CAAM,OAAA,CAAQ,UAAA,EAAY,EAAE,MAAA,EAAQ,eAAA,EAAiB,CAAA,EAAG;AAAA,MACzF,MAAA,EAAQ;AAAA,KACX,CAAA;AAED,IAAA,OAAO,KAAA,CAAM,QAAQ,QAAQ,CAAA;AAAA,EACjC,CAAA;AACJ,CAAC,CAAA;ACvBM,IAAM,+BAA+B,UAAA,EAA0C,CAAE,CAAC,GAAA,EAAK,KAAK,KAAA,KAAU;AACzG,EAAA,MAAM,UAAA,GAAa,MAAM,OAAA,CAAQ,CAAA,EAAG,IAAI,aAAA,CAAc,MAAA,CAAO,CAAC,CAAC,CAAA,yBAAA,CAA2B,CAAA;AAU1F,EAAA,OAAO,eAAe,sBAAsB,QAAA,EAA6B;AACrE,IAAA,MAAM,SAAA,GAAYA,YAAU,QAAQ,CAAA;AAEpC,IAAA,MAAM,MAAA,GAAS;AAAA,MACX,UAAA,EAAY,IAAA,CAAK,SAAA,CAAU,SAAS,CAAA;AAAA,MACpC,MAAM,GAAA,CAAI;AAAA,KACd;AAEA,IAAA,MAAM,kBAAkB,KAAA,CAAM,SAAA,CAAU,IAAA,CAAK,SAAA,CAAU,MAAM,CAAC,CAAA;AAC9D,IAAA,IAAI,CAAC,eAAA,EAAiB,MAAM,IAAI,aAAa,0BAA0B,CAAA;AAEvE,IAAA,MAAM,QAAA,GAAW,MAAM,KAAA,CAAM,OAAA,CAAQ,UAAA,EAAY;AAAA,MAC7C,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,IAAI,eAAA,CAAgB;AAAA,QACtB,MAAA,EAAQ;AAAA,OACX;AAAA,KACJ,CAAA;AAED,IAAA,OAAO,KAAA,CAAM,QAAQ,QAAQ,CAAA;AAAA,EACjC,CAAA;AACJ,CAAC,CAAA;;;ACpCM,IAAM,qBAAqB,UAAA,EAAgC,CAAE,CAAC,GAAA,EAAK,KAAK,KAAA,KAAU;AACrF,EAAA,MAAM,UAAA,GAAa,MAAM,OAAA,CAAQ,CAAA,EAAG,IAAI,aAAA,CAAc,WAAA,CAAY,CAAC,CAAC,CAAA,4BAAA,CAA8B,CAAA;AASlG,EAAA,OAAO,eAAe,YAAY,UAAA,EAAoB;AAClD,IAAA,MAAM,MAAA,GAAS;AAAA,MACX,OAAA,EAAS,UAAA;AAAA,MACT,MAAM,GAAA,CAAI;AAAA,KACd;AAEA,IAAA,MAAM,kBAAkB,KAAA,CAAM,SAAA,CAAU,IAAA,CAAK,SAAA,CAAU,MAAM,CAAC,CAAA;AAC9D,IAAA,IAAI,CAAC,eAAA,EAAiB,MAAM,IAAI,aAAa,0BAA0B,CAAA;AAEvE,IAAA,MAAM,QAAA,GAAW,MAAM,KAAA,CAAM,OAAA,CAAQ,KAAA,CAAM,OAAA,CAAQ,UAAA,EAAY,EAAE,MAAA,EAAQ,eAAA,EAAiB,CAAA,EAAG;AAAA,MACzF,MAAA,EAAQ;AAAA,KACX,CAAA;AAED,IAAA,OAAO,KAAA,CAAM,QAAQ,QAAQ,CAAA;AAAA,EACjC,CAAA;AACJ,CAAC,CAAA;;;ACvBM,IAAM,8BAA8B,UAAA,EAAyC,CAAE,CAAC,GAAA,EAAK,MAAM,KAAA,KAAU;AACxG,EAAA,MAAM,UAAA,GAAa,MAAM,OAAA,CAAQ,CAAA,EAAG,IAAI,aAAA,CAAc,WAAA,CAAY,CAAC,CAAC,CAAA,kCAAA,CAAoC,CAAA;AASxG,EAAA,OAAO,eAAe,qBAAqB,UAAA,EAAoB;AAC3D,IAAA,MAAM,MAAA,GAAS;AAAA,MACX,OAAA,EAAS;AAAA,KACb;AAEA,IAAA,MAAM,kBAAkB,KAAA,CAAM,SAAA,CAAU,IAAA,CAAK,SAAA,CAAU,MAAM,CAAC,CAAA;AAC9D,IAAA,IAAI,CAAC,eAAA,EAAiB,MAAM,IAAI,aAAa,0BAA0B,CAAA;AAEvE,IAAA,MAAM,QAAA,GAAW,MAAM,KAAA,CAAM,OAAA,CAAQ,KAAA,CAAM,OAAA,CAAQ,UAAA,EAAY,EAAE,MAAA,EAAQ,eAAA,EAAiB,CAAA,EAAG;AAAA,MACzF,MAAA,EAAQ;AAAA,KACX,CAAA;AAED,IAAA,OAAO,KAAA,CAAM,QAAQ,QAAQ,CAAA;AAAA,EACjC,CAAA;AACJ,CAAC,CAAA;;;ACVM,IAAM,8BAA8B,UAAA,EAAyC,CAAE,CAAC,GAAA,EAAK,KAAK,KAAA,KAAU;AACvG,EAAA,MAAM,UAAA,GAAa,MAAM,OAAA,CAAQ,CAAA,EAAG,IAAI,aAAA,CAAc,MAAA,CAAO,CAAC,CAAC,CAAA,0BAAA,CAA4B,CAAA;AAS3F,EAAA,OAAO,eAAe,oBAAA,GAAuB;AACzC,IAAA,MAAM,MAAA,GAAS;AAAA,MACX,MAAM,GAAA,CAAI;AAAA,KACd;AAEA,IAAA,MAAM,kBAAkB,KAAA,CAAM,SAAA,CAAU,IAAA,CAAK,SAAA,CAAU,MAAM,CAAC,CAAA;AAC9D,IAAA,IAAI,CAAC,eAAA,EAAiB,MAAM,IAAI,aAAa,0BAA0B,CAAA;AAEvE,IAAA,MAAM,QAAA,GAAW,MAAM,KAAA,CAAM,OAAA,CAAQ,KAAA,CAAM,OAAA,CAAQ,UAAA,EAAY,EAAE,MAAA,EAAQ,eAAA,EAAiB,CAAA,EAAG;AAAA,MACzF,MAAA,EAAQ;AAAA,KACX,CAAA;AAED,IAAA,OAAO,KAAA,CAAM,QAAQ,QAAQ,CAAA;AAAA,EACjC,CAAA;AACJ,CAAC,CAAA;;;ACxCM,IAAM,qBAAqB,UAAA,EAAgC,CAAE,CAAC,IAAA,EAAM,MAAM,KAAA,KAAU;AACvF,EAAA,MAAM,UAAA,GAAa,KAAA,CAAM,OAAA,CAAQ,CAAA,uCAAA,CAAyC,CAAA;AAO1E,EAAA,OAAO,eAAe,WAAA,GAAc;AAChC,IAAA,MAAM,SAAS,EAAC;AAEhB,IAAA,MAAM,kBAAkB,KAAA,CAAM,SAAA,CAAU,IAAA,CAAK,SAAA,CAAU,MAAM,CAAC,CAAA;AAC9D,IAAA,IAAI,CAAC,eAAA,EAAiB,MAAM,IAAI,aAAa,0BAA0B,CAAA;AAEvE,IAAA,MAAM,QAAA,GAAW,MAAM,KAAA,CAAM,OAAA,CAAQ,KAAA,CAAM,OAAA,CAAQ,UAAA,EAAY,EAAE,MAAA,EAAQ,eAAA,EAAiB,CAAA,EAAG;AAAA,MACzF,MAAA,EAAQ;AAAA,KACX,CAAA;AAED,IAAA,OAAO,KAAA,CAAM,QAAQ,QAAQ,CAAA;AAAA,EACjC,CAAA;AACJ,CAAC,CAAA;;;ACXM,IAAM,qBAAqB,UAAA,EAAqB,CAAE,CAAC,GAAA,EAAK,KAAK,KAAA,KAAU;AAC1E,EAAA,MAAM,aAAa,KAAA,CAAM,OAAA,CAAQ,GAAG,GAAA,CAAI,aAAA,CAAc,OAAO,CAAA,oBAAA,CAAsB,CAAA;AAUnF,EAAA,OAAO,eAAe,YAAY,OAAA,EAAiB;AAC/C,IAAA,IAAI,CAAC,OAAA,EAAS,MAAM,IAAI,aAAa,iBAAiB,CAAA;AAEtD,IAAA,MAAM,MAAA,GAAS;AAAA,MACX,OAAA;AAAA,MACA,GAAA,EAAK,CAAA;AAAA,MACL,KAAA,EAAO,CAAA;AAAA,MACP,MAAM,GAAA,CAAI;AAAA,KACd;AAEA,IAAA,MAAM,kBAAkB,KAAA,CAAM,SAAA,CAAU,IAAA,CAAK,SAAA,CAAU,MAAM,CAAC,CAAA;AAC9D,IAAA,IAAI,CAAC,eAAA,EAAiB,MAAM,IAAI,aAAa,2BAA2B,CAAA;AAExE,IAAA,MAAM,eAAA,GAAkB,IAAI,GAAA,CAAI,UAAU,CAAA;AAC1C,IAAA,eAAA,CAAgB,QAAA,GAAW,gBAAgB,QAAA,GAAW,mBAAA;AAEtD,IAAA,MAAM,QAAA,GAAW,MAAM,KAAA,CAAM,OAAA;AAAA,MACzB,KAAA,CAAM,OAAA,CAAQ,eAAA,CAAgB,QAAA,EAAS,EAAG;AAAA,QACtC,MAAA,EAAQ;AAAA,OACX;AAAA,KACL;AAEA,IAAA,OAAO,KAAA,CAAM,OAAA,CAAQ,QAAA,EAAU,CAAC,MAAA,KAAW;AACvC,MAAA,MAAM,cAAc,MAAA,CAAO,IAAA;AAC3B,MAAA,MAAM,aAAuB,EAAC;AAI9B,MAAA,IAAI,WAAA,CAAY,YAAA;AACZ,QAAA,WAAA,CAAY,YAAA,CAAa,QAAQ,CAAC,OAAA,KAAY,WAAW,IAAA,CAAK,OAAA,CAAQ,UAAU,CAAC,CAAA;AAErF,MAAA,OAAO,UAAA;AAAA,IACX,CAAC,CAAA;AAAA,EACL,CAAA;AACJ,CAAC,CAAA;AC9BM,IAAM,2BAA2B,UAAA,EAAkC,CAAE,CAAC,GAAA,EAAK,KAAK,KAAA,KAAU;AAC7F,EAAA,MAAM,aAAa,KAAA,CAAM,OAAA,CAAQ,GAAG,GAAA,CAAI,aAAA,CAAc,OAAO,CAAA,mCAAA,CAAqC,CAAA;AASlG,EAAA,OAAO,eAAe,kBAAkB,UAAA,EAA+B;AACnE,IAAA,IAAI,CAAC,UAAA,EAAY,MAAM,IAAI,aAAa,oBAAoB,CAAA;AAC5D,IAAA,MAAM,eAAA,GAAkBA,YAAU,UAAU,CAAA;AAC5C,IAAA,IAAI,gBAAgB,MAAA,IAAU,CAAA,EAAG,MAAM,IAAI,aAAa,oBAAoB,CAAA;AAE5E,IAAA,MAAM,WAAkC,EAAC;AACzC,IAAA,MAAM,QAAQ,eAAA,CAAgB,GAAA,CAAI,CAAC,SAAA,KAAc,gBAAA,CAAiB,SAAS,CAAC,CAAA;AAC5E,IAAA,MAAM,WAAA,GAAc,MAAM,OAAA,CAAQ,UAAA,CAAW,KAAK,CAAA;AAClD,IAAA,WAAA,CAAY,OAAA,CAAQ,CAAC,MAAA,KAAW;AAC5B,MAAA,IAAI,OAAO,MAAA,KAAW,WAAA,EAAa,QAAA,CAAS,IAAA,CAAK,OAAO,KAAK,CAAA;AAAA,IACjE,CAAC,CAAA;AAED,IAAA,OAAO,QAAA;AAAA,EACX,CAAA;AAEA,EAAA,eAAe,iBAAiB,SAAA,EAAmB;AAC/C,IAAA,MAAM,MAAA,GAAS;AAAA,MACX,GAAA,EAAK;AAAA,KACT;AAEA,IAAA,MAAM,kBAAkB,KAAA,CAAM,SAAA,CAAU,IAAA,CAAK,SAAA,CAAU,MAAM,CAAC,CAAA;AAC9D,IAAA,IAAI,CAAC,eAAA,EAAiB,MAAM,IAAI,aAAa,2BAA2B,CAAA;AAExE,IAAA,MAAM,QAAA,GAAW,MAAM,KAAA,CAAM,OAAA;AAAA,MACzB,KAAA,CAAM,QAAQ,UAAA,EAAY;AAAA,QACtB,MAAA,EAAQ;AAAA,OACX;AAAA,KACL;AAEA,IAAA,OAAO,eAAA,CAA+B,KAAK,QAAQ,CAAA;AAAA,EACvD;AACJ,CAAC,CAAA;;;ACrDM,IAAM,uBAAuB,UAAA,EAAkC,CAAE,CAAC,GAAA,EAAK,GAAG,KAAA,KAAU;AACvF,EAAA,MAAM,UAAA,GAAa,MAAM,OAAA,CAAQ,CAAA,EAAG,IAAI,aAAA,CAAc,YAAA,CAAa,CAAC,CAAC,CAAA,uBAAA,CAAyB,CAAA;AAQ9F,EAAA,OAAO,eAAe,aAAA,GAAgB;AAClC,IAAA,MAAM,SAAS,EAAC;AAEhB,IAAA,MAAM,kBAAkB,KAAA,CAAM,SAAA,CAAU,IAAA,CAAK,SAAA,CAAU,MAAM,CAAC,CAAA;AAC9D,IAAA,IAAI,CAAC,eAAA,EAAiB,MAAM,IAAI,aAAa,0BAA0B,CAAA;AAEvE,IAAA,MAAM,QAAA,GAAW,MAAM,KAAA,CAAM,OAAA,CAAQ,KAAA,CAAM,OAAA,CAAQ,UAAA,EAAY,EAAE,MAAA,EAAQ,eAAA,EAAiB,CAAA,EAAG;AAAA,MACzF,MAAA,EAAQ;AAAA,KACX,CAAA;AAED,IAAA,OAAO,KAAA,CAAM,OAAA,CAAQ,QAAA,EAAU,CAAC,MAAA,KAAW;AACvC,MAAA,MAAM,OAAO,MAAA,CAAO,IAAA;AACpB,MAAA,IAAI,OAAO,IAAA,CAAK,IAAA,KAAS,QAAA,EAAU;AAC/B,QAAA,OAAO;AAAA,UACH,IAAA,EAAM,IAAA,CAAK,KAAA,CAAM,IAAA,CAAK,IAAI,CAAA;AAAA,UAC1B,QAAQ,IAAA,CAAK;AAAA,SACjB;AAAA,MACJ;AAEA,MAAA,OAAO,IAAA;AAAA,IACX,CAAC,CAAA;AAAA,EACL,CAAA;AACJ,CAAC,CAAA;AClCM,IAAM,qBAAqB,UAAA,EAA6B,CAAE,CAAC,GAAA,EAAK,KAAK,KAAA,KAAU;AAClF,EAAA,MAAM,UAAA,GAAa,MAAM,OAAA,CAAQ,CAAA,EAAG,IAAI,aAAA,CAAc,OAAA,CAAQ,CAAC,CAAC,CAAA,iCAAA,CAAmC,CAAA;AASnG,EAAA,OAAO,eAAeK,aAAY,MAAA,EAA2B;AACzD,IAAA,IAAI,CAAC,MAAA,EAAQ,MAAM,IAAI,aAAa,iBAAiB,CAAA;AAErD,IAAA,MAAM,OAAA,GAAUL,YAAU,MAAM,CAAA;AAEhC,IAAA,MAAM,gBAAA,GAAmB,OAAA,CAAQ,GAAA,CAAI,CAAC,EAAA,KAAO;AACzC,MAAA,IAAI,EAAA,CAAG,KAAA,CAAM,GAAG,CAAA,CAAE,SAAS,CAAA,EAAG;AAC1B,QAAA,OAAO,EAAA;AAAA,MACX;AACA,MAAA,OAAO,GAAG,EAAE,CAAA,EAAA,CAAA;AAAA,IAChB,CAAC,CAAA;AAED,IAAA,MAAM,MAAA,GAAS;AAAA,MACX,iBAAA,EAAmB,IAAI,QAAA,CAAU,SAAA;AAAA,MACjC,mBAAA,EAAqB,gBAAA;AAAA,MACrB,WAAA,EAAa,GAAA;AAAA,MACb,UAAU,GAAA,CAAI,QAAA;AAAA,MACd,kBAAA,EAAoB,CAAA;AAAA,MACpB,MAAM,GAAA,CAAI;AAAA,KACd;AAEA,IAAA,MAAM,kBAAkB,KAAA,CAAM,SAAA,CAAU,IAAA,CAAK,SAAA,CAAU,MAAM,CAAC,CAAA;AAC9D,IAAA,IAAI,CAAC,eAAA,EAAiB,MAAM,IAAI,aAAa,0BAA0B,CAAA;AAEvE,IAAA,MAAM,QAAA,GAAW,MAAM,KAAA,CAAM,OAAA,CAAQ,UAAA,EAAY;AAAA,MAC7C,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,IAAI,eAAA,CAAgB;AAAA,QACtB,MAAA,EAAQ;AAAA,OACX;AAAA,KACJ,CAAA;AAED,IAAA,OAAO,KAAA,CAAM,QAAQ,QAAQ,CAAA;AAAA,EACjC,CAAA;AACJ,CAAC,CAAA;AC3CM,IAAM,4BAA4B,UAAA,EAAuC,CAAE,CAAC,GAAA,EAAK,KAAK,KAAA,KAAU;AACnG,EAAA,MAAM,UAAA,GAAa,MAAM,OAAA,CAAQ,CAAA,EAAG,IAAI,aAAA,CAAc,KAAA,CAAM,CAAC,CAAC,CAAA,uBAAA,CAAyB,CAAA;AAWvF,EAAA,OAAO,eAAe,kBAAA,CAAmB,MAAA,EAAgB,OAAA,EAA4B;AACjF,IAAA,MAAM,MAAA,GAAS;AAAA,MACX,KAAA,EAAOA,YAAU,OAAO,CAAA;AAAA,MACxB,MAAA,EAAQ,MAAA;AAAA,MACR,UAAA,EAAY,EAAA;AAAA,MACZ,cAAA,EAAgB,CAAA;AAAA,MAChB,YAAY,GAAA,CAAI;AAAA,KACpB;AAEA,IAAA,MAAM,kBAAkB,KAAA,CAAM,SAAA,CAAU,IAAA,CAAK,SAAA,CAAU,MAAM,CAAC,CAAA;AAC9D,IAAA,IAAI,CAAC,eAAA,EAAiB,MAAM,IAAI,aAAa,0BAA0B,CAAA;AAEvE,IAAA,MAAM,QAAA,GAAW,MAAM,KAAA,CAAM,OAAA,CAAQ,KAAA,CAAM,OAAA,CAAQ,UAAA,EAAY,EAAE,MAAA,EAAQ,eAAA,EAAiB,CAAA,EAAG;AAAA,MACzF,MAAA,EAAQ;AAAA,KACX,CAAA;AAED,IAAA,OAAO,KAAA,CAAM,QAAQ,QAAQ,CAAA;AAAA,EACjC,CAAA;AACJ,CAAC,CAAA;;;ACxCM,IAAM,4BAA4B,UAAA,EAAuC,CAAE,CAAC,GAAA,EAAK,KAAK,KAAA,KAAU;AACnG,EAAA,MAAM,UAAA,GAAa,MAAM,OAAA,CAAQ,CAAA,EAAG,IAAI,aAAA,CAAc,KAAA,CAAM,CAAC,CAAC,CAAA,uBAAA,CAAyB,CAAA;AASvF,EAAA,OAAO,eAAe,mBAAmB,OAAA,EAAiB;AACtD,IAAA,MAAM,MAAA,GAAS;AAAA,MACX,IAAA,EAAM,OAAA;AAAA,MACN,MAAM,GAAA,CAAI;AAAA,KACd;AAEA,IAAA,MAAM,kBAAkB,KAAA,CAAM,SAAA,CAAU,IAAA,CAAK,SAAA,CAAU,MAAM,CAAC,CAAA;AAC9D,IAAA,IAAI,CAAC,eAAA,EAAiB,MAAM,IAAI,aAAa,0BAA0B,CAAA;AAEvE,IAAA,MAAM,QAAA,GAAW,MAAM,KAAA,CAAM,OAAA,CAAQ,KAAA,CAAM,OAAA,CAAQ,UAAA,EAAY,EAAE,MAAA,EAAQ,eAAA,EAAiB,CAAA,EAAG;AAAA,MACzF,MAAA,EAAQ;AAAA,KACX,CAAA;AAED,IAAA,OAAO,KAAA,CAAM,QAAQ,QAAQ,CAAA;AAAA,EACjC,CAAA;AACJ,CAAC,CAAA;;;ACzBM,IAAM,uBAAuB,UAAA,EAAkC,CAAE,CAAC,GAAA,EAAK,KAAK,KAAA,KAAU;AACzF,EAAA,MAAM,UAAA,GAAa,MAAM,OAAA,CAAQ,CAAA,EAAG,IAAI,aAAA,CAAc,KAAA,CAAM,CAAC,CAAC,CAAA,oBAAA,CAAsB,CAAA;AAWpF,EAAA,OAAO,eAAe,cAAc,IAAA,EAAc;AAC9C,IAAA,MAAM,MAAA,GAAS;AAAA,MACX,IAAA;AAAA,MACA,YAAY,GAAA,CAAI;AAAA,KACpB;AAEA,IAAA,MAAM,kBAAkB,KAAA,CAAM,SAAA,CAAU,IAAA,CAAK,SAAA,CAAU,MAAM,CAAC,CAAA;AAC9D,IAAA,IAAI,CAAC,eAAA,EAAiB,MAAM,IAAI,aAAa,0BAA0B,CAAA;AAEvE,IAAA,MAAM,QAAA,GAAW,MAAM,KAAA,CAAM,OAAA,CAAQ,KAAA,CAAM,OAAA,CAAQ,UAAA,EAAY,EAAE,MAAA,EAAQ,eAAA,EAAiB,CAAA,EAAG;AAAA,MACzF,MAAA,EAAQ;AAAA,KACX,CAAA;AAED,IAAA,OAAO,KAAA,CAAM,QAAQ,QAAQ,CAAA;AAAA,EACjC,CAAA;AACJ,CAAC,CAAA;;;AC3BM,IAAM,mBAAmB,UAAA,EAA8B,CAAE,CAAC,GAAA,EAAK,KAAK,KAAA,KAAU;AACjF,EAAA,MAAM,UAAA,GAAa,MAAM,OAAA,CAAQ,CAAA,EAAG,IAAI,aAAA,CAAc,IAAA,CAAK,CAAC,CAAC,CAAA,UAAA,CAAY,CAAA;AAOzE,EAAA,OAAO,eAAe,SAAA,GAAY;AAC9B,IAAA,MAAM,MAAA,GAAS;AAAA,MACX,MAAM,GAAA,CAAI;AAAA,KACd;AAEA,IAAA,MAAM,kBAAkB,KAAA,CAAM,SAAA,CAAU,IAAA,CAAK,SAAA,CAAU,MAAM,CAAC,CAAA;AAC9D,IAAA,IAAI,CAAC,eAAA,EAAiB,MAAM,IAAI,aAAa,0BAA0B,CAAA;AAEvE,IAAA,MAAM,QAAA,GAAW,MAAM,KAAA,CAAM,OAAA,CAAQ,KAAA,CAAM,OAAA,CAAQ,UAAA,EAAY,EAAE,MAAA,EAAQ,eAAA,EAAiB,CAAA,EAAG;AAAA,MACzF,MAAA,EAAQ;AAAA,KACX,CAAA;AAED,IAAA,OAAO,KAAA,CAAM,OAAA,CAAQ,QAAA,EAAU,MAAA,EAAW,KAAK,CAAA;AAAA,EACnD,CAAA;AACJ,CAAC,CAAA;;;ACjBM,IAAM,oBAAoB,UAAA,EAA+B,CAAE,CAAC,GAAA,EAAK,KAAK,KAAA,KAAU;AACnF,EAAA,MAAM,UAAA,GAAa,MAAM,OAAA,CAAQ,CAAA,EAAG,IAAI,aAAA,CAAc,OAAA,CAAQ,CAAC,CAAC,CAAA,8BAAA,CAAgC,CAAA;AAShG,EAAA,OAAO,eAAe,WAAW,GAAA,EAAa;AAC1C,IAAA,MAAM,MAAA,GAAS;AAAA,MACX,GAAA;AAAA,MACA,SAAA,EAAW,CAAA;AAAA,MACX,MAAM,GAAA,CAAI;AAAA,KACd;AAEA,IAAA,MAAM,kBAAkB,KAAA,CAAM,SAAA,CAAU,IAAA,CAAK,SAAA,CAAU,MAAM,CAAC,CAAA;AAC9D,IAAA,IAAI,CAAC,eAAA,EAAiB,MAAM,IAAI,aAAa,0BAA0B,CAAA;AAEvE,IAAA,MAAM,QAAA,GAAW,MAAM,KAAA,CAAM,OAAA,CAAQ,KAAA,CAAM,OAAA,CAAQ,UAAA,EAAY,EAAE,MAAA,EAAQ,eAAA,EAAiB,CAAA,EAAG;AAAA,MACzF,MAAA,EAAQ;AAAA,KACX,CAAA;AAED,IAAA,OAAO,KAAA,CAAM,QAAQ,QAAQ,CAAA;AAAA,EACjC,CAAA;AACJ,CAAC,CAAA;;;AC7BM,IAAM,oBAAoB,UAAA,EAA+B,CAAE,CAAC,GAAA,EAAK,KAAK,KAAA,KAAU;AACnF,EAAA,MAAM,UAAA,GAAa,MAAM,OAAA,CAAQ,CAAA,EAAG,IAAI,aAAA,CAAc,KAAA,CAAM,CAAC,CAAC,CAAA,gBAAA,CAAkB,CAAA;AAYhF,EAAA,OAAO,eAAe,UAAA,CAAW,OAAA,EAAiB,MAAA,GAAkB,KAAA,EAAO;AACvE,IAAA,MAAM,aAAA,GAAgB;AAAA,MAClB,KAAA,EAAO,CAAC,OAAO,CAAA;AAAA;AAAA,MACf,MAAM,GAAA,CAAI,IAAA;AAAA,MACV,MAAA,EAAQ,SAAS,CAAA,GAAI,CAAA;AAAA,MACrB,UAAU,GAAA,CAAI;AAAA,KAClB;AAEA,IAAA,MAAM,kBAAkB,KAAA,CAAM,SAAA,CAAU,IAAA,CAAK,SAAA,CAAU,aAAa,CAAC,CAAA;AACrE,IAAA,IAAI,CAAC,eAAA,EAAiB,MAAM,IAAI,aAAa,0BAA0B,CAAA;AAEvE,IAAA,MAAM,QAAA,GAAW,MAAM,KAAA,CAAM,OAAA,CAAQ,UAAA,EAAY;AAAA,MAC7C,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,IAAI,eAAA,CAAgB;AAAA,QACtB,MAAA,EAAQ;AAAA,OACX;AAAA,KACJ,CAAA;AAED,IAAA,OAAO,KAAA,CAAM,QAAQ,QAAQ,CAAA;AAAA,EACjC,CAAA;AACJ,CAAC,CAAA;;;ACnCM,IAAM,kBAAkB,UAAA,EAA6B,CAAE,CAAC,GAAA,EAAK,KAAK,KAAA,KAAU;AAC/E,EAAA,MAAM,UAAA,GAAa,MAAM,OAAA,CAAQ,CAAA,EAAG,IAAI,aAAA,CAAc,KAAA,CAAM,CAAC,CAAC,CAAA,aAAA,CAAe,CAAA;AAS7E,EAAA,OAAO,eAAe,SAAS,MAAA,EAAgB;AAC3C,IAAA,MAAM,MAAA,GAAS;AAAA,MACX,OAAA,EAAS,MAAA;AAAA,MACT,MAAM,GAAA,CAAI;AAAA,KACd;AAEA,IAAA,MAAM,kBAAkB,KAAA,CAAM,SAAA,CAAU,IAAA,CAAK,SAAA,CAAU,MAAM,CAAC,CAAA;AAC9D,IAAA,IAAI,CAAC,eAAA,EAAiB,MAAM,IAAI,aAAa,0BAA0B,CAAA;AAEvE,IAAA,MAAM,QAAA,GAAW,MAAM,KAAA,CAAM,OAAA,CAAQ,UAAA,EAAY;AAAA,MAC7C,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,IAAI,eAAA,CAAgB;AAAA,QACtB,MAAA,EAAQ;AAAA,OACX;AAAA,KACJ,CAAA;AAED,IAAA,OAAO,KAAA,CAAM,QAAQ,QAAQ,CAAA;AAAA,EACjC,CAAA;AACJ,CAAC,CAAA;;;ACRM,IAAM,mBAAmB,UAAA,EAA8B,CAAE,CAAC,GAAA,EAAK,KAAK,KAAA,KAAU;AACjF,EAAA,MAAM,UAAA,GAAa,MAAM,OAAA,CAAQ,CAAA,EAAG,IAAI,aAAA,CAAc,IAAA,CAAK,CAAC,CAAC,CAAA,sBAAA,CAAwB,CAAA;AAUrF,EAAA,OAAO,eAAe,UAAU,IAAA,EAAc;AAC1C,IAAA,MAAM,MAAA,GAAS;AAAA,MACX,IAAA;AAAA,MACA,OAAA,EAAS,CAAA;AAAA;AAAA,MACT,MAAM,GAAA,CAAI;AAAA,KACd;AAEA,IAAA,MAAM,kBAAkB,KAAA,CAAM,SAAA,CAAU,IAAA,CAAK,SAAA,CAAU,MAAM,CAAC,CAAA;AAC9D,IAAA,IAAI,CAAC,eAAA,EAAiB,MAAM,IAAI,aAAa,0BAA0B,CAAA;AAEvE,IAAA,MAAM,QAAA,GAAW,MAAM,KAAA,CAAM,OAAA,CAAQ,KAAA,CAAM,OAAA,CAAQ,UAAA,EAAY,EAAE,MAAA,EAAQ,eAAA,EAAiB,CAAA,EAAG;AAAA,MACzF,MAAA,EAAQ;AAAA,KACX,CAAA;AAED,IAAA,OAAO,KAAA,CAAM,QAAQ,QAAQ,CAAA;AAAA,EACjC,CAAA;AACJ,CAAC,CAAA;;;AC/CM,IAAM,6BAA6B,UAAA,EAAwC,CAAE,CAAC,GAAA,EAAK,MAAM,KAAA,KAAU;AACtG,EAAA,MAAM,UAAA,GAAa,MAAM,OAAA,CAAQ,CAAA,EAAG,IAAI,aAAA,CAAc,MAAA,CAAO,CAAC,CAAC,CAAA,kBAAA,CAAoB,CAAA;AASnF,EAAA,OAAO,eAAe,oBAAoB,QAAA,EAAkB;AACxD,IAAA,MAAM,MAAA,GAAS;AAAA,MACX,GAAA,EAAK;AAAA,KACT;AAEA,IAAA,MAAM,kBAAkB,KAAA,CAAM,SAAA,CAAU,IAAA,CAAK,SAAA,CAAU,MAAM,CAAC,CAAA;AAC9D,IAAA,IAAI,CAAC,eAAA,EAAiB,MAAM,IAAI,aAAa,0BAA0B,CAAA;AAEvE,IAAA,MAAM,QAAA,GAAW,MAAM,KAAA,CAAM,OAAA,CAAQ,UAAA,EAAY;AAAA,MAC7C,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,IAAI,eAAA,CAAgB;AAAA,QACtB,MAAA,EAAQ;AAAA,OACX;AAAA,KACJ,CAAA;AAED,IAAA,OAAO,KAAA,CAAM,QAAQ,QAAQ,CAAA;AAAA,EACjC,CAAA;AACJ,CAAC,CAAA;;;AC3BM,IAAM,sBAAsB,UAAA,EAAiC,CAAE,CAAC,GAAA,EAAK,KAAK,KAAA,KAAU;AACvF,EAAA,MAAM,UAAA,GAAa,MAAM,OAAA,CAAQ,CAAA,EAAG,IAAI,aAAA,CAAc,MAAA,CAAO,CAAC,CAAC,CAAA,kBAAA,CAAoB,CAAA;AASnF,EAAA,OAAO,eAAe,aAAa,QAAA,EAAkB;AACjD,IAAA,MAAM,MAAA,GAAS;AAAA,MACX,GAAA,EAAK,QAAA;AAAA,MACL,MAAM,GAAA,CAAI;AAAA,KACd;AAEA,IAAA,MAAM,kBAAkB,KAAA,CAAM,SAAA,CAAU,IAAA,CAAK,SAAA,CAAU,MAAM,CAAC,CAAA;AAC9D,IAAA,IAAI,CAAC,eAAA,EAAiB,MAAM,IAAI,aAAa,0BAA0B,CAAA;AAEvE,IAAA,MAAM,QAAA,GAAW,MAAM,KAAA,CAAM,OAAA,CAAQ,UAAA,EAAY;AAAA,MAC7C,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,IAAI,eAAA,CAAgB;AAAA,QACtB,MAAA,EAAQ;AAAA,OACX;AAAA,KACJ,CAAA;AAED,IAAA,OAAO,KAAA,CAAM,QAAQ,QAAQ,CAAA;AAAA,EACjC,CAAA;AACJ,CAAC,CAAA;;;AC5BM,IAAM,2BAA2B,UAAA,EAAsC,CAAE,CAAC,GAAA,EAAK,MAAM,KAAA,KAAU;AAClG,EAAA,MAAM,UAAA,GAAa,MAAM,OAAA,CAAQ,CAAA,EAAG,IAAI,aAAA,CAAc,KAAA,CAAM,CAAC,CAAC,CAAA,iBAAA,CAAmB,CAAA;AASjF,EAAA,OAAO,eAAe,kBAAkB,QAAA,EAAkB;AACtD,IAAA,MAAM,MAAA,GAAS;AAAA,MACX;AAAA,KACJ;AAEA,IAAA,MAAM,kBAAkB,KAAA,CAAM,SAAA,CAAU,IAAA,CAAK,SAAA,CAAU,MAAM,CAAC,CAAA;AAC9D,IAAA,IAAI,CAAC,eAAA,EAAiB,MAAM,IAAI,aAAa,0BAA0B,CAAA;AAEvE,IAAA,MAAM,QAAA,GAAW,MAAM,KAAA,CAAM,OAAA,CAAQ,KAAA,CAAM,OAAA,CAAQ,UAAA,EAAY,EAAE,MAAA,EAAQ,eAAA,EAAiB,CAAA,EAAG;AAAA,MACzF,MAAA,EAAQ;AAAA,KACX,CAAA;AAED,IAAA,OAAO,KAAA,CAAM,QAAQ,QAAQ,CAAA;AAAA,EACjC,CAAA;AACJ,CAAC,CAAA;ACtBM,IAAM,kCAAkC,UAAA,EAA6C,CAAE,CAAC,GAAA,EAAK,GAAG,KAAA,KAAU;AAC7G,EAAA,MAAM,UAAA,GAAa,MAAM,OAAA,CAAQ,CAAA,EAAG,IAAI,aAAA,CAAc,KAAA,CAAM,CAAC,CAAC,CAAA,6BAAA,CAA+B,CAAA;AAU7F,EAAA,OAAO,eAAe,wBAAA,CAAyB,QAAA,EAA6B,OAAA,EAAiB;AACzF,IAAA,MAAM,SAAA,GAAYA,YAAU,QAAQ,CAAA;AAEpC,IAAA,MAAM,MAAA,GAAS;AAAA,MACX,IAAA,EAAM,OAAA;AAAA,MACN,OAAA,EAAS;AAAA,KACb;AAEA,IAAA,MAAM,kBAAkB,KAAA,CAAM,SAAA,CAAU,IAAA,CAAK,SAAA,CAAU,MAAM,CAAC,CAAA;AAC9D,IAAA,IAAI,CAAC,eAAA,EAAiB,MAAM,IAAI,aAAa,0BAA0B,CAAA;AAEvE,IAAA,MAAM,QAAA,GAAW,MAAM,KAAA,CAAM,OAAA,CAAQ,KAAA,CAAM,OAAA,CAAQ,UAAA,EAAY,EAAE,MAAA,EAAQ,eAAA,EAAiB,CAAA,EAAG;AAAA,MACzF,MAAA,EAAQ;AAAA,KACX,CAAA;AAED,IAAA,OAAO,KAAA,CAAM,QAAQ,QAAQ,CAAA;AAAA,EACjC,CAAA;AACJ,CAAC,CAAA;AC5BM,IAAM,2BAA2B,UAAA,EAAsC,CAAE,CAAC,GAAA,EAAK,KAAK,KAAA,KAAU;AACjG,EAAA,MAAM,UAAA,GAAa,MAAM,OAAA,CAAQ,CAAA,EAAG,IAAI,aAAA,CAAc,KAAA,CAAM,CAAC,CAAC,CAAA,wBAAA,CAA0B,CAAA;AAWxF,EAAA,OAAO,eAAe,iBAAA,CAAkB,QAAA,EAA6B,OAAA,EAAiB;AAClF,IAAA,MAAM,SAAA,GAAYA,YAAU,QAAQ,CAAA;AAEpC,IAAA,MAAM,MAAA,GAAS;AAAA,MACX,IAAA,EAAM,OAAA;AAAA,MACN,OAAA,EAAS,SAAA;AAAA,MACT,MAAM,GAAA,CAAI;AAAA,KACd;AAEA,IAAA,MAAM,kBAAkB,KAAA,CAAM,SAAA,CAAU,IAAA,CAAK,SAAA,CAAU,MAAM,CAAC,CAAA;AAC9D,IAAA,IAAI,CAAC,eAAA,EAAiB,MAAM,IAAI,aAAa,0BAA0B,CAAA;AAEvE,IAAA,MAAM,QAAA,GAAW,MAAM,KAAA,CAAM,OAAA,CAAQ,KAAA,CAAM,OAAA,CAAQ,UAAA,EAAY,EAAE,MAAA,EAAQ,eAAA,EAAiB,CAAA,EAAG;AAAA,MACzF,MAAA,EAAQ;AAAA,KACX,CAAA;AAED,IAAA,OAAO,KAAA,CAAM,QAAQ,QAAQ,CAAA;AAAA,EACjC,CAAA;AACJ,CAAC,CAAA;AC3BM,IAAM,4BAA4B,UAAA,EAAuC,CAAE,CAAC,GAAA,EAAK,MAAM,KAAA,KAAU;AACpG,EAAA,MAAM,UAAA,GAAa,MAAM,OAAA,CAAQ,CAAA,EAAG,IAAI,aAAA,CAAc,aAAA,CAAc,CAAC,CAAC,CAAA,wBAAA,CAA0B,CAAA;AAWhG,EAAA,OAAO,eAAe,mBAAmB,OAAA,EAA4B;AACjE,IAAA,MAAM,QAAA,GAAWA,YAAU,OAAO,CAAA;AAElC,IAAA,MAAM,MAAA,GAAS;AAAA,MACX,OAAA,EAAS;AAAA,KACb;AAEA,IAAA,MAAM,kBAAkB,KAAA,CAAM,SAAA,CAAU,IAAA,CAAK,SAAA,CAAU,MAAM,CAAC,CAAA;AAC9D,IAAA,IAAI,CAAC,eAAA,EAAiB,MAAM,IAAI,aAAa,0BAA0B,CAAA;AAEvE,IAAA,MAAM,QAAA,GAAW,MAAM,KAAA,CAAM,OAAA,CAAQ,KAAA,CAAM,OAAA,CAAQ,UAAA,EAAY,EAAE,MAAA,EAAQ,eAAA,EAAiB,CAAA,EAAG;AAAA,MACzF,MAAA,EAAQ;AAAA,KACX,CAAA;AAED,IAAA,OAAO,KAAA,CAAM,QAAQ,QAAQ,CAAA;AAAA,EACjC,CAAA;AACJ,CAAC,CAAA;;;AChCM,IAAM,wBAAwB,UAAA,EAAmC,CAAE,CAAC,GAAA,EAAK,KAAK,KAAA,KAAU;AAC3F,EAAA,MAAM,UAAA,GAAa;AAAA,IACf,CAAA,CAAA,cAAmB,KAAA,CAAM,OAAA,CAAQ,CAAA,EAAG,IAAI,aAAA,CAAc,WAAA,CAAY,CAAC,CAAC,CAAA,wBAAA,CAA0B,CAAA;AAAA,IAC9F,CAAA,CAAA,eAAoB,KAAA,CAAM,OAAA,CAAQ,CAAA,EAAG,IAAI,aAAA,CAAc,WAAA,CAAY,CAAC,CAAC,CAAA,uBAAA,CAAyB;AAAA,GAClG;AAWA,EAAA,OAAO,eAAe,cAAA,CAAe,UAAA,EAAoB,QAAA,EAAkB,IAAA,GAAA,CAAA,aAAoC;AAC3G,IAAA,MAAM,SACF,IAAA,KAAA,CAAA,cACM;AAAA,MACI,GAAA,EAAK,QAAA;AAAA,MACL;AAAA,KACJ,GACA;AAAA,MACI,IAAA,EAAM,QAAA;AAAA,MACN,OAAA,EAAS,UAAA;AAAA,MACT,MAAM,GAAA,CAAI;AAAA,KACd;AAEV,IAAA,MAAM,kBAAkB,KAAA,CAAM,SAAA,CAAU,IAAA,CAAK,SAAA,CAAU,MAAM,CAAC,CAAA;AAC9D,IAAA,IAAI,CAAC,eAAA,EAAiB,MAAM,IAAI,aAAa,0BAA0B,CAAA;AAEvE,IAAA,MAAM,WAAW,MAAM,KAAA,CAAM,OAAA,CAAQ,UAAA,CAAW,IAAI,CAAA,EAAG;AAAA,MACnD,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,IAAI,eAAA,CAAgB;AAAA,QACtB,MAAA,EAAQ;AAAA,OACX;AAAA,KACJ,CAAA;AAED,IAAA,OAAO,KAAA,CAAM,QAAQ,QAAQ,CAAA;AAAA,EACjC,CAAA;AACJ,CAAC,CAAA;;;ACnCM,IAAM,0BAA0B,UAAA,EAAqC,CAAE,CAAC,GAAA,EAAK,KAAK,KAAA,KAAU;AAC/F,EAAA,MAAM,UAAA,GAAa,MAAM,OAAA,CAAQ,CAAA,EAAG,IAAI,aAAA,CAAc,YAAA,CAAa,CAAC,CAAC,CAAA,0BAAA,CAA4B,CAAA;AAUjG,EAAA,OAAO,eAAe,gBAAA,CAAiB,QAAA,EAAkB,IAAA,GAAA,CAAA,aAAoC;AACzF,IAAA,MAAM,SAAA,GAAY,KAAK,GAAA,EAAI;AAE3B,IAAA,MAAM,OAAA,GAAU,IAAA,KAAA,CAAA;AAChB,IAAA,MAAM,aAAA,GAAgB;AAAA,MAClB,KAAA,EAAO,KAAK,SAAA,CAAU;AAAA,QAClB,CAAC,OAAA,GAAU,YAAA,GAAe,WAAW,GAAG,CAAC,QAAQ,CAAA;AAAA,QACjD,CAAC,OAAA,GAAU,WAAA,GAAc,YAAY,GAAG,EAAC;AAAA,QACzC,CAAC,OAAA,GAAU,gBAAA,GAAmB,eAAe,GAAG;AAAA,UAC5C;AAAA,YACI,EAAA,EAAI,QAAA;AAAA,YACJ,EAAA,EAAI;AAAA;AACR,SACJ;AAAA,QACA,CAAC,OAAA,GAAU,eAAA,GAAkB,gBAAgB,GAAG;AAAC,OACpD;AAAA,KACL;AAEA,IAAA,MAAM,kBAAkB,KAAA,CAAM,SAAA,CAAU,IAAA,CAAK,SAAA,CAAU,aAAa,CAAC,CAAA;AACrE,IAAA,IAAI,CAAC,eAAA,EAAiB,MAAM,IAAI,aAAa,0BAA0B,CAAA;AAEvE,IAAA,MAAM,QAAA,GAAW,MAAM,KAAA,CAAM,OAAA,CAAQ,UAAA,EAAY;AAAA,MAC7C,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,IAAI,eAAA,CAAgB;AAAA,QACtB,MAAA,EAAQ;AAAA,OACX;AAAA,KACJ,CAAA;AAED,IAAA,OAAO,KAAA,CAAM,OAAA,CAAQ,QAAA,EAAU,CAAC,MAAA,KAAW;AACvC,MAAA,MAAM,OAAO,MAAA,CAAO,IAAA;AACpB,MAAA,IAAI,OAAO,IAAA,CAAK,IAAA,KAAS,QAAA,EAAU;AAC/B,QAAA,OAAO;AAAA,UACH,IAAA,EAAM,IAAA,CAAK,KAAA,CAAM,IAAA,CAAK,IAAI,CAAA;AAAA,UAC1B,QAAQ,IAAA,CAAK;AAAA,SACjB;AAAA,MACJ;AAEA,MAAA,OAAO,MAAA,CAAO,IAAA;AAAA,IAClB,CAAC,CAAA;AAAA,EACL,CAAA;AACJ,CAAC,CAAA;ACrDM,IAAM,6BAA6B,UAAA,EAAwC,CAAE,CAAC,GAAA,EAAK,KAAK,KAAA,KAAU;AACrG,EAAA,MAAM,UAAA,GAAa,MAAM,OAAA,CAAQ,CAAA,EAAG,IAAI,aAAA,CAAc,KAAA,CAAM,CAAC,CAAC,CAAA,kBAAA,CAAoB,CAAA;AAYlF,EAAA,OAAO,eAAe,mBAAA,CAAoB,QAAA,EAA6B,OAAA,EAAiB;AACpF,IAAA,MAAM,SAAA,GAAYA,YAAU,QAAQ,CAAA;AAEpC,IAAA,MAAM,MAAA,GAAS;AAAA,MACX,IAAA,EAAM,OAAA;AAAA,MACN,OAAA,EAAS,SAAA;AAAA,MACT,MAAM,GAAA,CAAI;AAAA,KACd;AAEA,IAAA,MAAM,kBAAkB,KAAA,CAAM,SAAA,CAAU,IAAA,CAAK,SAAA,CAAU,MAAM,CAAC,CAAA;AAC9D,IAAA,IAAI,CAAC,eAAA,EAAiB,MAAM,IAAI,aAAa,0BAA0B,CAAA;AAEvE,IAAA,MAAM,QAAA,GAAW,MAAM,KAAA,CAAM,OAAA,CAAQ,UAAA,EAAY;AAAA,MAC7C,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,IAAI,eAAA,CAAgB;AAAA,QACtB,MAAA,EAAQ;AAAA,OACX;AAAA,KACJ,CAAA;AAED,IAAA,OAAO,KAAA,CAAM,QAAQ,QAAQ,CAAA;AAAA,EACjC,CAAA;AACJ,CAAC,CAAA;;;ACtCM,IAAM,+BAA+B,UAAA,EAA0C,CAAE,CAAC,GAAA,EAAK,MAAM,KAAA,KAAU;AAC1G,EAAA,MAAM,UAAA,GAAa,MAAM,OAAA,CAAQ,CAAA,EAAG,IAAI,aAAA,CAAc,YAAA,CAAa,CAAC,CAAC,CAAA,wBAAA,CAA0B,CAAA;AAO/F,EAAA,OAAO,eAAe,qBAAA,GAAwB;AAC1C,IAAA,MAAM,SAAS,EAAC;AAEhB,IAAA,MAAM,kBAAkB,KAAA,CAAM,SAAA,CAAU,IAAA,CAAK,SAAA,CAAU,MAAM,CAAC,CAAA;AAC9D,IAAA,IAAI,CAAC,eAAA,EAAiB,MAAM,IAAI,aAAa,0BAA0B,CAAA;AAEvE,IAAA,MAAM,QAAA,GAAW,MAAM,KAAA,CAAM,OAAA,CAAQ,KAAA,CAAM,OAAA,CAAQ,UAAA,EAAY,EAAE,MAAA,EAAQ,eAAA,EAAiB,CAAA,EAAG;AAAA,MACzF,MAAA,EAAQ;AAAA,KACX,CAAA;AAED,IAAA,OAAO,KAAA,CAAM,QAAQ,QAAQ,CAAA;AAAA,EACjC,CAAA;AACJ,CAAC,CAAA;;;ACpBM,IAAM,qBAAqB,UAAA,EAAgC,CAAE,CAAC,GAAA,EAAK,KAAK,KAAA,KAAU;AACrF,EAAA,MAAM,UAAA,GAAa,MAAM,OAAA,CAAQ,CAAA,EAAG,IAAI,aAAA,CAAc,OAAA,CAAQ,CAAC,CAAC,CAAA,wBAAA,CAA0B,CAAA;AAS1F,EAAA,OAAO,eAAe,YAAY,OAAA,EAAiB;AAC/C,IAAA,MAAM,MAAA,GAAS;AAAA,MACX,OAAA;AAAA,MACA,YAAA,EAAc,CAAA;AAAA,MACd,MAAM,GAAA,CAAI;AAAA,KACd;AAEA,IAAA,MAAM,kBAAkB,KAAA,CAAM,SAAA,CAAU,IAAA,CAAK,SAAA,CAAU,MAAM,CAAC,CAAA;AAC9D,IAAA,IAAI,CAAC,eAAA,EAAiB,MAAM,IAAI,aAAa,0BAA0B,CAAA;AAEvE,IAAA,MAAM,QAAA,GAAW,MAAM,KAAA,CAAM,OAAA,CAAQ,KAAA,CAAM,OAAA,CAAQ,UAAA,EAAY,EAAE,MAAA,EAAQ,eAAA,EAAiB,CAAA,EAAG;AAAA,MACzF,MAAA,EAAQ;AAAA,KACX,CAAA;AAED,IAAA,OAAO,KAAA,CAAM,QAAQ,QAAQ,CAAA;AAAA,EACjC,CAAA;AACJ,CAAC,CAAA;ACrBM,IAAK,gCAAA,qBAAAM,iCAAAA,KAAL;AACH,EAAAA,iCAAAA,CAAAA,iCAAAA,CAAA,aAAU,CAAA,CAAA,GAAV,SAAA;AACA,EAAAA,iCAAAA,CAAAA,iCAAAA,CAAA,yBAAsB,GAAA,CAAA,GAAtB,qBAAA;AACA,EAAAA,iCAAAA,CAAAA,iCAAAA,CAAA,sBAAmB,GAAA,CAAA,GAAnB,kBAAA;AACA,EAAAA,iCAAAA,CAAAA,iCAAAA,CAAA,6BAA0B,GAAA,CAAA,GAA1B,yBAAA;AAJQ,EAAA,OAAAA,iCAAAA;AAAA,CAAA,EAAA,gCAAA,IAAA,EAAA;AAWL,IAAM,oCAAoC,UAAA,EAA+C,CAAE,CAAC,GAAA,EAAK,GAAG,KAAA,KAAU;AACjH,EAAA,MAAM,UAAA,GAAa,MAAM,OAAA,CAAQ,CAAA,EAAG,IAAI,aAAA,CAAc,KAAA,CAAM,CAAC,CAAC,CAAA,8BAAA,CAAgC,CAAA;AAY9F,EAAA,OAAO,eAAe,0BAAA,CAA2B,OAAA,EAA4C,OAAA,EAAiB;AAC1G,IAAA,MAAM,OAAA,GAAUN,WAAAA,CAAU,OAAA,CAAQ,OAAO,CAAA;AAEzC,IAAA,MAAM,MAAA,GAAS;AAAA,MACX,IAAA,EAAM,OAAA;AAAA,MACN,OAAA;AAAA,MACA,SAAA,EAAW,OAAA,CAAQ,SAAA,GAAY,CAAA,GAAI;AAAA;AAAA,KACvC;AAEA,IAAA,MAAM,kBAAkB,KAAA,CAAM,SAAA,CAAU,IAAA,CAAK,SAAA,CAAU,MAAM,CAAC,CAAA;AAC9D,IAAA,IAAI,CAAC,eAAA,EAAiB,MAAM,IAAI,aAAa,0BAA0B,CAAA;AAEvE,IAAA,MAAM,QAAA,GAAW,MAAM,KAAA,CAAM,OAAA,CAAQ,KAAA,CAAM,OAAA,CAAQ,UAAA,EAAY,EAAE,MAAA,EAAQ,eAAA,EAAiB,CAAA,EAAG;AAAA,MACzF,MAAA,EAAQ;AAAA,KACX,CAAA;AAED,IAAA,OAAO,KAAA,CAAM,QAAQ,QAAQ,CAAA;AAAA,EACjC,CAAA;AACJ,CAAC,CAAA;;;ACvCM,IAAM,sBAAsB,UAAA,EAAiC,CAAE,CAAC,GAAA,EAAK,KAAK,KAAA,KAAU;AACvF,EAAA,MAAM,UAAA,GAAa,MAAM,OAAA,CAAQ,CAAA,EAAG,IAAI,aAAA,CAAc,KAAA,CAAM,CAAC,CAAC,CAAA,kBAAA,CAAoB,CAAA;AAWlF,EAAA,OAAO,eAAe,YAAA,CAAa,OAAA,EAA8B,QAAA,EAAkB,IAAA,GAAA,CAAA,aAAoC;AAzB3H,IAAA,IAAA,EAAA;AA0BQ,IAAA,MAAM,MAAA,GAAS;AAAA,MACX,SAAS,OAAA,CAAQ,OAAA;AAAA,MACjB,YAAY,OAAA,CAAQ,UAAA;AAAA,MACpB,WAAA,EAAA,CAAA,CAAa,EAAA,GAAA,OAAA,CAAQ,WAAA,KAAR,IAAA,GAAA,MAAA,GAAA,EAAA,CAAqB,WAAA,EAAA,KAAiB,KAAA;AAAA,MACnD,QAAA,EAAU,IAAA,CAAK,GAAA,EAAI,CAAE,QAAA,EAAS;AAAA,MAC9B,KAAA,EAAO,KAAK,GAAA,EAAI;AAAA,MAChB,OAAA,EAAS,QAAA;AAAA,MACT,QAAA,EAAU,yBAA4B,CAAA,GAAI;AAAA,KAC9C;AAEA,IAAA,MAAM,kBAAkB,KAAA,CAAM,SAAA,CAAU,IAAA,CAAK,SAAA,CAAU,MAAM,CAAC,CAAA;AAC9D,IAAA,IAAI,CAAC,eAAA,EAAiB,MAAM,IAAI,aAAa,0BAA0B,CAAA;AAEvE,IAAA,MAAM,QAAA,GAAW,MAAM,KAAA,CAAM,OAAA,CAAQ,UAAA,EAAY;AAAA,MAC7C,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,IAAI,eAAA,CAAgB;AAAA,QACtB,MAAA,EAAQ;AAAA,OACX;AAAA,KACJ,CAAA;AAED,IAAA,OAAO,KAAA,CAAM,QAAQ,QAAQ,CAAA;AAAA,EACjC,CAAA;AACJ,CAAC,CAAA;;;AClCM,IAAM,kBAAkB,UAAA,EAA6B,CAAE,CAAC,GAAA,EAAK,KAAK,KAAA,KAAU;AAC/E,EAAA,MAAM,UAAA,GAAa;AAAA,IACf,CAAA,CAAA,cAAmB,KAAA,CAAM,OAAA,CAAQ,CAAA,EAAG,IAAI,aAAA,CAAc,IAAA,CAAK,CAAC,CAAC,CAAA,oBAAA,CAAsB,CAAA;AAAA,IACnF,CAAA,CAAA,eAAoB,KAAA,CAAM,OAAA,CAAQ,CAAA,EAAG,IAAI,aAAA,CAAc,IAAA,CAAK,CAAC,CAAC,CAAA,kBAAA,CAAoB;AAAA,GACtF;AAcA,EAAA,OAAO,eAAe,QAAA,CAAS,OAAA,EAA0B,QAAA,EAAkB,IAAA,GAAA,CAAA,aAAoC;AAhCnH,IAAA,IAAA,EAAA;AAiCQ,IAAA,MAAM,IAAA,GAAO,MAAM,GAAA,CAAI,KAAA,CAAM,QAAQ,MAAM,CAAA;AAC3C,IAAA,MAAM,SAAA,GAAY,IAAA,CAAK,OAAA,CAAQ,MAAM,CAAA;AACrC,IAAA,MAAM,QAAA,GAAW,IAAA,CAAK,GAAA,EAAI,CAAE,QAAA,EAAS;AAErC,IAAA,MAAM,MAAA,GAAkC;AAAA,MACpC,GAAA,EAAA,CAAK,EAAA,GAAA,OAAA,CAAQ,GAAA,KAAR,IAAA,GAAA,EAAA,GAAe,CAAA;AAAA,MACpB,OAAA,EAAS,CAAA;AAAA,MACT,QAAA;AAAA,MACA,OAAA,EAAS;AAAA,QACL,YAAY,OAAA,CAAQ,MAAA;AAAA,QACpB,SAAA,EAAW;AAAA;AACf,KACJ;AAEA,IAAA,IAAI,QAAQ,WAAA,EAAa;AACrB,MAAC,MAAA,CAAO,OAAA,CAAmC,KAAA,GAAQ,OAAA,CAAQ,WAAA;AAAA,IAC/D;AAEA,IAAA,IAAI,IAAA,IAAA,CAAA,cAA0B;AAC1B,MAAA,MAAA,CAAO,UAAA,GAAa,CAAA;AACpB,MAAA,MAAA,CAAO,IAAA,GAAO,QAAA;AAAA,IAClB,CAAA,MAAO;AACH,MAAA,MAAA,CAAO,IAAA,GAAO,QAAA;AACd,MAAA,MAAA,CAAO,OAAO,GAAA,CAAI,IAAA;AAAA,IACtB;AAEA,IAAA,MAAM,kBAAA,GAAqB,IAAA,CAAK,SAAA,CAAU,MAAA,CAAO,OAAO,CAAA;AACxD,IAAA,MAAA,CAAO,OAAA,GAAU,kBAAA;AAEjB,IAAA,MAAM,kBAAkB,KAAA,CAAM,SAAA,CAAU,IAAA,CAAK,SAAA,CAAU,MAAM,CAAC,CAAA;AAC9D,IAAA,IAAI,CAAC,eAAA,EAAiB,MAAM,IAAI,aAAa,0BAA0B,CAAA;AAEvE,IAAA,MAAM,WAAW,MAAM,KAAA,CAAM,OAAA,CAAQ,UAAA,CAAW,IAAI,CAAA,EAAG;AAAA,MACnD,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,IAAI,eAAA,CAAgB;AAAA,QACtB,MAAA,EAAQ;AAAA,OACX;AAAA,KACJ,CAAA;AAED,IAAA,OAAO,KAAA,CAAM,QAAQ,QAAQ,CAAA;AAAA,EACjC,CAAA;AACJ,CAAC,CAAA;ACnCM,IAAM,4BAA4B,UAAA,EAAuC,CAAE,CAAC,GAAA,EAAK,KAAK,KAAA,KAAU;AACnG,EAAA,MAAM,UAAA,GAAa;AAAA,IACf,CAAA,CAAA,cAAmB,KAAA,CAAM,OAAA,CAAQ,CAAA,EAAG,IAAI,aAAA,CAAc,IAAA,CAAK,CAAC,CAAC,CAAA,wBAAA,CAA0B,CAAA;AAAA,IACvF,CAAA,CAAA,eAAoB,KAAA,CAAM,OAAA,CAAQ,CAAA,EAAG,IAAI,aAAA,CAAc,KAAA,CAAM,CAAC,CAAC,CAAA,sBAAA,CAAwB;AAAA,GAC3F;AAWA,EAAA,OAAO,eAAe,kBAAA,CAClB,MAAA,EACA,QAAA,EACA,IAAA,GAAA,CAAA,aACF;AACE,IAAA,IAAI,CAAC,QAAA,EAAU,MAAM,IAAI,aAAa,sDAAsD,CAAA;AAC5F,IAAA,MAAM,aAAA,GAAgBA,YAAU,QAAQ,CAAA;AACxC,IAAA,IAAI,aAAA,CAAc,MAAA,KAAW,CAAA,IAAK,aAAA,CAAc,MAAA,GAAS,qBAAA;AACrD,MAAA,MAAM,IAAI,aAAa,kDAAkD,CAAA;AAK7E,IAAA,MAAM,IAAA,GAAO,aAAA,CAAc,CAAC,CAAA,CAAE,IAAA;AAC9B,IAAA,IAAI,IAAA,KAAA,CAAA,gBAA6B,CAAC,aAAA,CAAc,KAAA,CAAM,CAAC,GAAA,KAAQ,GAAA,CAAI,SAAS,IAAI,CAAA;AAC5E,MAAA,MAAM,IAAI,aAAa,uDAAuD,CAAA;AAElF,IAAA,MAAM,QAAA,GAAqB,cAAA,CAAA;AAAA,MACvB,IAAA,EAAM,SAAS,CAAA,GAAI,CAAA;AAAA,MACnB,IAAA,EAAM,aAAA,CAAc,GAAA,CAAI,CAAC,GAAA,MAAS;AAAA,QAC9B,KAAK,GAAA,CAAI,QAAA;AAAA,QACT,KAAK,GAAA,CAAI,KAAA;AAAA,QACT,IAAI,GAAA,CAAI,OAAA;AAAA,QACR,IAAI,GAAA,CAAI,IAAA,KAAS,GAAA,CAAI,GAAA,GAAM,MAAM,GAAA,CAAI,IAAA;AAAA,QACrC,IAAI,GAAA,CAAI,OAAA;AAAA,QACR,IAAI,GAAA,CAAI,EAAA,IAAM,CAAA,KAAM,GAAA,CAAI,KAAK,CAAA,GAAI,EAAA;AAAA,QACjC,IAAI,GAAA,CAAI,EAAA,IAAM,CAAA,KAAM,GAAA,CAAI,KAAK,CAAA,GAAI,EAAA;AAAA,QACjC,KAAK,GAAA,CAAI,GAAA,IAAO,CAAA,KAAM,GAAA,CAAI,MAAM,CAAA,GAAI,EAAA;AAAA,QACpC,EAAA,EAAI,QAAA,CAAS,CAAA,EAAG,GAAA,CAAI,EAAE,CAAA,CAAE,CAAA,IAAK,CAAA,KAAM,QAAA,CAAS,CAAA,EAAG,GAAA,CAAI,EAAE,CAAA,CAAE,IAAI,CAAA,GAAI;AAAA,OACnE,CAAE;AAAA,KAAA,EACE,IAAA,KAAA,CAAA,cAA2B,EAAC,GAAI,EAAE,MAAM,IAAA,EAAK,CAAA;AAGrD,IAAA,MAAM,MAAA,GAAS,cAAA,CAAA;AAAA,MACX,QAAA,EAAU,IAAA,CAAK,SAAA,CAAU,QAAQ;AAAA,KAAA,EAC7B,wBAA2B,EAAC,GAAI,EAAE,IAAA,EAAM,IAAI,IAAA,EAAK,CAAA;AAGzD,IAAA,MAAM,kBAAkB,KAAA,CAAM,SAAA,CAAU,IAAA,CAAK,SAAA,CAAU,MAAM,CAAC,CAAA;AAC9D,IAAA,IAAI,CAAC,eAAA,EAAiB,MAAM,IAAI,aAAa,0BAA0B,CAAA;AAEvE,IAAA,MAAM,WAAW,MAAM,KAAA,CAAM,OAAA,CAAQ,UAAA,CAAW,IAAI,CAAA,EAAG;AAAA,MACnD,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,IAAI,eAAA,CAAgB;AAAA,QACtB,MAAA,EAAQ;AAAA,OACX;AAAA,KACJ,CAAA;AAED,IAAA,OAAO,KAAA,CAAM,QAAQ,QAAQ,CAAA;AAAA,EACjC,CAAA;AACJ,CAAC,CAAA;;;ACnGM,IAAM,2BAA2B,UAAA,EAAsC,CAAE,CAAC,GAAA,EAAK,KAAK,KAAA,KAAU;AACjG,EAAA,MAAM,UAAA,GAAa,MAAM,OAAA,CAAQ,CAAA,EAAG,IAAI,aAAA,CAAc,MAAA,CAAO,CAAC,CAAC,CAAA,mBAAA,CAAqB,CAAA;AAcpF,EAAA,OAAO,eAAe,iBAAA,CAAkB,GAAA,EAAa,MAAA,EAAgB;AACjE,IAAA,MAAM,MAAA,GAAS;AAAA,MACX,IAAA,EAAM,MAAA;AAAA,MACN,GAAA;AAAA,MACA,MAAA,EAAQ,EAAA;AAAA,MACR,MAAM,GAAA,CAAI,IAAA;AAAA,MACV,UAAU,GAAA,CAAI,QAAA;AAAA,MACd,SAAA,EAAW,KAAK,SAAA,CAAU;AAAA,QACtB,KAAA,EAAO;AAAA,OACV;AAAA,KACL;AAEA,IAAA,MAAM,kBAAkB,KAAA,CAAM,SAAA,CAAU,IAAA,CAAK,SAAA,CAAU,MAAM,CAAC,CAAA;AAC9D,IAAA,IAAI,CAAC,eAAA,EAAiB,MAAM,IAAI,aAAa,0BAA0B,CAAA;AAEvE,IAAA,MAAM,QAAA,GAAW,MAAM,KAAA,CAAM,OAAA,CAAQ,UAAA,EAAY;AAAA,MAC7C,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,IAAI,eAAA,CAAgB;AAAA,QACtB,MAAA,EAAQ;AAAA,OACX;AAAA,KACJ,CAAA;AAED,IAAA,OAAO,KAAA,CAAM,QAAQ,QAAQ,CAAA;AAAA,EACjC,CAAA;AACJ,CAAC,CAAA;;;AC9BM,IAAM,kBAAkB,UAAA,EAA6B,CAAE,CAAC,GAAA,EAAK,KAAK,KAAA,KAAU;AAC/E,EAAA,MAAM,UAAA,GAAa;AAAA,IACf,CAAA,CAAA,cAAmB,KAAA,CAAM,OAAA,CAAQ,CAAA,EAAG,IAAI,aAAA,CAAc,IAAA,CAAK,CAAC,CAAC,CAAA,iBAAA,CAAA,EAAqB;AAAA,MAC9E,MAAA,EAAQ;AAAA,KACX,CAAA;AAAA,IACD,CAAA,CAAA,eAAoB,KAAA,CAAM,OAAA,CAAQ,CAAA,EAAG,IAAI,aAAA,CAAc,KAAA,CAAM,CAAC,CAAC,CAAA,mBAAA,CAAA,EAAuB;AAAA,MAClF,MAAA,EAAQ;AAAA,KACX;AAAA,GACL;AAWA,EAAA,OAAO,eAAe,QAAA,CAAS,OAAA,EAA0B,QAAA,EAAkB,IAAA,GAAA,CAAA,aAAoC;AAjCnH,IAAA,IAAA,EAAA;AAkCQ,IAAA,MAAM,GAAA,GAAM,MAAM,GAAA,CAAI,SAAA,CAAU,QAAQ,IAAI,CAAA;AAE5C,IAAA,MAAM,MAAA,GAAkC;AAAA,MACpC,GAAA,EACI,QAAQ,GAAA,IAAO,OAAA,CAAQ,IAAI,IAAA,EAAK,GAC1B,QAAQ,GAAA,CAAI,QAAA,CAAS,QAAQ,IAAI,CAAA,GAC7B,QAAQ,GAAA,GACR,OAAA,CAAQ,MAAM,GAAA,GAAM,OAAA,CAAQ,OAChC,OAAA,CAAQ,IAAA;AAAA,MAClB,IAAA,EAAM,IAAI,IAAA,CAAK,IAAA;AAAA,MACf,GAAA,EAAK,IAAI,IAAA,CAAK,GAAA;AAAA,MACd,KAAA,EAAO,IAAI,IAAA,CAAK,KAAA;AAAA,MAChB,IAAA,EAAM,IAAI,IAAA,CAAK,IAAA;AAAA,MACf,KAAA,EAAO,IAAI,IAAA,CAAK,KAAA;AAAA,MAChB,IAAA,EAAM,CAAA;AAAA;AAAA,MACN,KAAA,EAAO,IAAA,CAAK,SAAA,CAAU,GAAA,CAAI,KAAK,KAAK,CAAA;AAAA,MACpC,GAAA,EAAA,CAAK,EAAA,GAAA,OAAA,CAAQ,GAAA,KAAR,IAAA,GAAA,EAAA,GAAe,CAAA;AAAA,MACpB,QAAA,EAAU,KAAK,GAAA;AAAI,KACvB;AAEA,IAAA,IAAI,IAAA,IAAA,CAAA,cAA0B;AAC1B,MAAA,MAAA,CAAO,IAAA,GAAO,QAAA;AACd,MAAA,MAAA,CAAO,OAAO,GAAA,CAAI,IAAA;AAAA,IAEtB,CAAA,MAAO;AACH,MAAA,MAAA,CAAO,IAAA,GAAO,QAAA;AACd,MAAA,MAAA,CAAO,WAAA,GAAc,EAAA;AAAA,IACzB;AAEA,IAAA,MAAM,kBAAkB,KAAA,CAAM,SAAA,CAAU,IAAA,CAAK,SAAA,CAAU,MAAM,CAAC,CAAA;AAC9D,IAAA,IAAI,CAAC,eAAA,EAAiB,MAAM,IAAI,aAAa,0BAA0B,CAAA;AAEvE,IAAA,MAAM,WAAW,MAAM,KAAA,CAAM,OAAA,CAAQ,UAAA,CAAW,IAAI,CAAA,EAAG;AAAA,MACnD,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,IAAI,eAAA,CAAgB;AAAA,QACtB,MAAA,EAAQ;AAAA,OACX;AAAA,KACJ,CAAA;AAED,IAAA,OAAO,KAAA,CAAM,QAAQ,QAAQ,CAAA;AAAA,EACjC,CAAA;AACJ,CAAC,CAAA;ACnCD,IAAM,iBAAA,GAAoB;AAAA,EACtB,KAAA,EAAO,sBAAA;AAAA,EACP,GAAA,EAAK,MAAA;AAAA,EACL,KAAA,EAAO,gBAAA;AAAA,EACP,MAAA,EAAQ;AACZ,CAAA;AAEA,SAAS,kBAAkB,KAAA,EAAyB;AAChD,EAAA,MAAM,SAAA,GAAY,KAAA;AAClB,EAAA,IAAI,OAAO,SAAA,CAAU,OAAA,IAAW,QAAA,SAAiB,SAAA,CAAU,WAAA;AAC3D,EAAA,IAAI,UAAU,OAAA,IAAW,WAAA;AACrB,IAAA,OAAO;AAAA,MACH,UAAA,EAAY;AAAA,QACR,KAAA,EAAO,CAAA;AAAA,QACP,IAAA,EAAM,CAAA;AAAA,QACN,IAAA,EAAM,CAAA;AAAA,QACN,OAAA,EAAS,CAAA;AAAA,QACT,GAAA,EAAK;AAAA;AACT,KACJ;AAEJ,EAAA,OAAO,aAAA,CAAA,cAAA,CAAA,EAAA,EACA,UAAU,OAAA,CAAA,EADV;AAAA,IAEH,QAAA,EAAU,UAAU,OAAA,CAAQ,KAAA;AAAA,IAC5B,MAAA,EAAQ,UAAU,OAAA,CAAQ,IAAA;AAAA,IAC1B,SAAA,EAAW,UAAU,OAAA,CAAQ;AAAA,GACjC,CAAA;AACJ;AAEA,SAAS,YAAY,KAAA,EAAyB;AAC1C,EAAA,MAAM,SAAA,GAAY,KAAA;AAClB,EAAA,IAAI,SAAA,CAAU,OAAA,IAAW,WAAA,IAAe,OAAO,SAAA,CAAU,OAAA,IAAW,QAAA,IAAY,OAAO,SAAA,CAAU,OAAA,CAAQ,MAAA,IAAU,QAAA,EAAU;AACzH,IAAA,OAAO,KAAK,KAAA,CAAM,SAAA,CAAU,OAAA,CAAQ,MAAM,EAAE,IAAA,CAAK,OAAA;AAAA,EACrD;AAEA,EAAA,OAAO,EAAA;AACX;AA6BO,IAAK,SAAA,qBAAAO,UAAAA,KAAL;AACH,EAAAA,WAAA,MAAA,CAAA,GAAO,GAAA;AACP,EAAAA,WAAA,QAAA,CAAA,GAAS,GAAA;AACT,EAAAA,WAAA,WAAA,CAAA,GAAY,GAAA;AACZ,EAAAA,WAAA,eAAA,CAAA,GAAgB,GAAA;AAChB,EAAAA,WAAA,KAAA,CAAA,GAAM,UAAA;AACN,EAAAA,WAAA,QAAA,CAAA,GAAS,UAAA;AACT,EAAAA,WAAA,QAAA,CAAA,GAAS,UAAA;AACT,EAAAA,WAAA,OAAA,CAAA,GAAQ,UAAA;AACR,EAAAA,WAAA,OAAA,CAAA,GAAQ,MAAA;AACR,EAAAA,WAAA,KAAA,CAAA,GAAM,MAAA;AACN,EAAAA,WAAA,eAAA,CAAA,GAAgB,OAAA;AAChB,EAAAA,WAAA,aAAA,CAAA,GAAc,OAAA;AACd,EAAAA,WAAA,QAAA,CAAA,GAAS,OAAA;AAbD,EAAA,OAAAA,UAAAA;AAAA,CAAA,EAAA,SAAA,IAAA,EAAA;AAgCL,IAAK,OAAA,qBAAAC,QAAAA,KAAL;AACH,EAAAA,QAAAA,CAAAA,QAAAA,CAAA,SAAA,CAAA,GAAA,CAAA,CAAA,GAAA,SAAA;AACA,EAAAA,QAAAA,CAAAA,QAAAA,CAAA,WAAA,CAAA,GAAA,CAAA,CAAA,GAAA,WAAA;AACA,EAAAA,QAAAA,CAAAA,QAAAA,CAAA,QAAA,CAAA,GAAA,CAAA,CAAA,GAAA,QAAA;AAHQ,EAAA,OAAAA,QAAAA;AAAA,CAAA,EAAA,OAAA,IAAA,EAAA;AAoDL,IAAM,qBAAqB,UAAA,EAAW,CAAE,CAAC,GAAA,EAAK,KAAK,KAAA,KAAU;AAChE,EAAA,MAAM,WAAA,GAAc;AAAA,IAChB,OAAA,EAAS;AAAA,MACL,CAAA,CAAA,cAAmB,KAAA,CAAM,OAAA,CAAQ,CAAA,EAAG,IAAI,aAAA,CAAc,IAAA,CAAK,CAAC,CAAC,CAAA,YAAA,CAAA,EAAgB;AAAA,QACzE,MAAA,EAAQ;AAAA,OACX,CAAA;AAAA,MACD,CAAA,CAAA,eAAoB,KAAA,CAAM,OAAA,CAAQ,CAAA,EAAG,IAAI,aAAA,CAAc,KAAA,CAAM,CAAC,CAAC,CAAA,UAAA,CAAA,EAAc;AAAA,QACzE,MAAA,EAAQ;AAAA,OACX;AAAA,KACL;AAAA,IACA,UAAA,EAAY;AAAA,MACR,gBAAmB,CAAA,EAAG,IAAI,aAAA,CAAc,IAAA,CAAK,CAAC,CAAC,CAAA,aAAA,CAAA;AAAA,MAC/C,iBAAoB,CAAA,EAAG,IAAI,aAAA,CAAc,IAAA,CAAK,CAAC,CAAC,CAAA,WAAA;AAAA;AACpD,GACJ;AAEA,EAAA,MAAM,EAAE,SAAA,EAAU,GAAI,GAAA,CAAI,QAAA,CAAU,QAAA;AAEpC,EAAA,SAAS,gBAAgB,SAAA,EAAmB;AACxC,IAAA,OAAO,YAAY,SAAA,CAAU,QAAA;AAAA,EACjC;AAEA,EAAA,SAAS,oBAAoB,QAAA,EAAkB;AAC3C,IAAA,OAAO,QAAA,GAAW,SAAA,CAAU,sBAAA,GAAyB,IAAA,GAAO,IAAA;AAAA,EAChE;AAEA,EAAA,SAAS,gBAAA,GAAmB;AACxB,IAAA,OAAO,KAAK,GAAA,EAAI;AAAA,EACpB;AAEA,EAAA,eAAe,KAAK,IAAA,EAA2D;AAC3E,IAAA,MAAM,SAAA,GAAYR,YAAU,IAAI,CAAA;AAEhC,IAAA,MAAM,WAAyC,EAAC;AAEhD,IAAA,KAAA,MAAW,QAAQ,SAAA,EAAW;AAC1B,MAAA,QAAA,CAAS,IAAA;AAAA,QAAA,CACJ,YAAY;AACT,UAAA,MAAM,QAAA,GAAW,MAAM,KAAA,CAAM,OAAA,CAAQ,KAAK,GAAA,EAAK;AAAA,YAC3C,MAAA,EAAQ,MAAA;AAAA,YACR,MAAM,IAAA,CAAK,IAAA;AAAA,YACX,SAAS,IAAA,CAAK;AAAA,WACjB,CAAA;AAED,UAAA,OAAO,MAAM,eAAA,CAAmC,GAAA,EAAK,QAAQ,CAAA;AAAA,QACjE,CAAA;AAAG,OACP;AAAA,IACJ;AAEA,IAAA,OAAO,MAAM,OAAA,CAAQ,GAAA,CAAI,QAAQ,CAAA;AAAA,EACrC;AAEA,EAAA,eAAe,OAAA,CAAQ,QAA0B,GAAA,EAAmC;AAChF,IAAA,MAAM,QAAA,GAAW,IAAIE,SAAAA,EAAS;AAC9B,IAAA,MAAM,MAAA,GAAS,OAAO,MAAA,IAAU,QAAA,GAAW,MAAMD,GAAAA,CAAG,QAAA,CAAS,MAAM,CAAA,GAAI,MAAA,CAAO,IAAA;AAC9E,IAAA,QAAA,CAAS,MAAA,CAAO,eAAe,MAAA,EAAQ;AAAA,MACnC,QAAA,EAAU,MAAA;AAAA,MACV,WAAA,EAAa;AAAA,KAChB,CAAA;AAED,IAAA,MAAM,MAAA,GAAS;AAAA,MACX,QAAA,EAAU,KAAK,GAAA,EAAI;AAAA,MACnB,MAAM,GAAA,CAAI;AAAA,KACd;AAEA,IAAA,MAAM,kBAAkB,KAAA,CAAM,SAAA,CAAU,IAAA,CAAK,SAAA,CAAU,MAAM,CAAC,CAAA;AAC9D,IAAA,IAAI,CAAC,eAAA,EAAiB,MAAM,IAAI,aAAa,2BAA2B,CAAA;AAExE,IAAA,MAAM,QAAA,GAAW,MAAM,KAAA,CAAM,OAAA;AAAA,MACzB,KAAA,CAAM,OAAA,CAAQ,GAAA,GAAM,UAAA,EAAY;AAAA,QAC5B,MAAA,EAAQ;AAAA,OACX,CAAA;AAAA,MACD;AAAA,QACI,MAAA,EAAQ,MAAA;AAAA,QACR,OAAA,EAAS,SAAS,UAAA,EAAW;AAAA,QAC7B,IAAA,EAAM,SAAS,SAAA;AAAU;AAC7B,KACJ;AAEA,IAAA,OAAO,MAAM,eAAA,CAA6B,GAAA,EAAK,QAAQ,CAAA;AAAA,EAC3D;AAEA,EAAA,SAAS,cAAA,CAAe,IAAA,EAAkB,GAAA,EAAa,QAAA,EAAsB;AACzE,IAAA,IAAI,eAAA,GAAkB,CAAA;AACtB,IAAA,MAAM,aAAA,GACF,CAAC,OAAA,CAAQ,QAAQ,KAAK,IAAA,IAAA,CAAA,eAChBD,WAAAA,CAAU,QAAQ,CAAA,CACb,MAAA,CAAO,CAAC,MAAM,CAAA,CAAE,GAAA,IAAO,CAAA,IAAK,CAAA,CAAE,GAAA,IAAO,CAAA,CAAE,MAAM,CAAC,CAAA,CAC9C,GAAA,CAAI,CAAC,CAAA,KAAM;AACR,MAAA,eAAA,IAAmB,CAAA,CAAE,GAAA;AACrB,MAAA,OAAO;AAAA,QACH,KAAK,CAAA,CAAE,GAAA;AAAA,QACP,KAAK,CAAA,CAAE,GAAA;AAAA,QACP,KAAK,CAAA,CAAE,GAAA;AAAA,QACP,IAAA,EAAM,CAAA,CAAE,GAAA,IAAO,IAAA,GAAO,CAAA,GAAI;AAAA,OAC9B;AAAA,IACJ,CAAC,IACL,EAAC;AAEX,IAAA,IAAI,eAAA,GAAkB,IAAI,MAAA,EAAQ;AAC9B,MAAA,MAAM,IAAI,aAAa,kEAAkE,CAAA;AAAA,IAC7F;AAEA,IAAA,OAAO;AAAA,MACH,aAAA;AAAA,MACA,QAAA,EAAU;AAAA,KACd;AAAA,EACJ;AAEA,EAAA,SAAS,YAAA,CAAa,QAAiC,MAAA,EAAkB;AACrE,IAAA,IAAI,MAAA;AACA,MAAAH,QAAO,MAAA,EAAQ;AAAA,QACX,cAAA,EAAgB,KAAK,SAAA,CAAU;AAAA,UAC3B,MAAA,EAAQ,MAAA,CAAO,GAAA,CAAI,CAAC,CAAA,KAAM;AA9S9C,YAAA,IAAA,EAAA;AA+SwB,YAAA,MAAM,UAAA,GAAa,iCACZ,CAAA,CAAA,EADY;AAAA,cAEf,UAAA,EAAY,MAAA;AAAA,cACZ,EAAA,EACI,CAAA,CAAE,EAAA,IAAM,OAAA,gBACF,qBAAiB,OAAA,CAAQ,KAAA,EAAO,CAAA,EAAA,CAAG,EAAA,GAAA,CAAA,CAAE,UAAA,KAAF,IAAA,GAAA,EAAA,GAAgB,CAAC,CAAA,CAAA,CAAG,IACvD,CAAA,CAAE;AAAA,aAChB,CAAA;AAEA,YAAA,mBAAA,CAAoB,UAAU,CAAA;AAC9B,YAAA,OAAO,UAAA;AAAA,UACX,CAAC,CAAA;AAAA,UACD,GAAA,EAAK;AAAA,SACR;AAAA,OACJ,CAAA;AAAA,EACT;AAEA,EAAA,SAAS,aAAA,CAAc,QAAiC,OAAA,EAAmB;AACvE,IAAA,IAAI,OAAA,IAAW,CAAA,oBAAqB,OAAA,IAAW,CAAA,eAAgB;AAC3D,MAAAA,QAAO,MAAA,EAAQ,EAAE,UAAU,EAAE,OAAA,IAAW,CAAA;AAAA,IAC5C;AAAA,EACJ;AAEA,EAAA,eAAe,aAAA,CACX,EAAE,GAAA,EAAK,MAAA,EAAQ,OAAA,EAAS,UAAU,KAAA,EAAO,GAAA,EAAI,EAC7C,QAAA,EACA,IAAA,EACF;AACE,IAAA,IAAI,CAAC,OAAO,GAAA,CAAI,MAAA,IAAU,GAAG,MAAM,IAAI,aAAa,yBAAyB,CAAA;AAC7E,IAAA,MAAM,cAAA,GAAiB,IAAA,IAAA,CAAA;AAEvB,IAAA,MAAM,EAAE,aAAA,EAAe,QAAA,KAAa,cAAA,CAAe,IAAA,EAAM,KAAK,QAAQ,CAAA;AACtE,IAAA,GAAA,GAAM,QAAA;AAEN,IAAA,IAAI,KAAA,EAAO;AACP,MAAA,IAAI,OAAO,KAAA,CAAM,OAAA,IAAW,QAAA,IAAY,KAAA,CAAM,WAAW,SAAA,EAAW;AAChE,QAAA,MAAM,IAAI,aAAa,oDAAoD,CAAA;AAAA,MAC/E;AAEA,MAAA,IAAI,KAAA,CAAM,WAAW,YAAA,EAAc;AAC/B,QAAA,MAAM,IAAI,aAAa,8CAA8C,CAAA;AAAA,MACzE;AAAA,IACJ;AAEA,IAAA,MAAM,eAAA,GAAkB,aAAA,CAAc,MAAA,GAAS,CAAA,IAAK,cAAA;AACpD,IAAA,MAAM,SAAS,KAAA,GACT;AAAA,MACI,IAAA,EAAM,iBAAiB,MAAA,GAAY,QAAA;AAAA,MACnC,IAAA,EAAM,iBAAiB,QAAA,GAAW,MAAA;AAAA,MAClC,OAAA,EAAS,GAAA;AAAA,MACT,QAAA,EAAU,KAAK,GAAA,EAAI;AAAA,MACnB,WAAA,EAAa,eAAA,GAAkB,IAAA,CAAK,SAAA,CAAU,aAAa,CAAA,GAAI,MAAA;AAAA,MAC/D,WAAW,KAAA,CAAM,OAAA;AAAA,MACjB,QAAQ,KAAA,CAAM,KAAA;AAAA,MACd,WAAW,KAAA,CAAM,QAAA;AAAA,MACjB,QAAA,EAAU,oBAAA,CAAqB,KAAA,CAAM,OAAO,CAAA;AAAA,MAC5C,QAAQ,KAAA,CAAM,EAAA;AAAA,MACd,IAAA,EAAM,OAAO,KAAA,CAAM,OAAA,IAAW,WAAW,KAAA,CAAM,OAAA,GAAU,YAAY,KAAK,CAAA;AAAA,MAC1E,IAAA,EAAM,cAAA,GAAiB,MAAA,GAAY,GAAA,CAAI,IAAA;AAAA,MACvC,UAAA,EAAY,iBAAiB,CAAA,GAAI,MAAA;AAAA,MACjC,YAAY,cAAA,GAAiB,IAAA,CAAK,UAAU,iBAAA,CAAkB,KAAK,CAAC,CAAA,GAAI,MAAA;AAAA,MACxE,SAAS,KAAA,CAAM,GAAA;AAAA,MACf,KAAK,GAAA,IAAA,IAAA,GAAA,GAAA,GAAO;AAAA,KAChB,GACA;AAAA,MACI,OAAA,EAAS,GAAA;AAAA,MACT,QAAA,EAAU,KAAK,GAAA,EAAI;AAAA,MACnB,WAAA,EAAa,eAAA,GAAkB,IAAA,CAAK,SAAA,CAAU,aAAa,CAAA,GAAI,MAAA;AAAA,MAC/D,IAAA,EAAM,cAAA,GAAiB,MAAA,GAAY,GAAA,CAAI,IAAA;AAAA,MACvC,KAAK,GAAA,IAAA,IAAA,GAAA,GAAA,GAAO,CAAA;AAAA,MACZ,UAAA,EAAY,iBAAiB,CAAA,GAAI,MAAA;AAAA,MACjC,IAAA,EAAM,iBAAiB,MAAA,GAAY,QAAA;AAAA,MACnC,IAAA,EAAM,iBAAiB,QAAA,GAAW;AAAA,KACtC;AAEN,IAAA,YAAA,CAAa,QAAQ,MAAM,CAAA;AAC3B,IAAA,aAAA,CAAc,QAAQ,OAAO,CAAA;AAE7B,IAAA,mBAAA,CAAoB,MAAM,CAAA;AAE1B,IAAA,MAAM,kBAAkB,KAAA,CAAM,SAAA,CAAU,IAAA,CAAK,SAAA,CAAU,MAAM,CAAC,CAAA;AAC9D,IAAA,IAAI,CAAC,eAAA,EAAiB,MAAM,IAAI,aAAa,2BAA2B,CAAA;AACxE,IAAA,MAAM,kBAAkB,IAAI,GAAA,CAAI,WAAA,CAAY,OAAA,CAAQ,IAAI,CAAC,CAAA;AACzD,IAAA,IAAI,KAAA,EAAO;AACP,MAAA,eAAA,CAAgB,QAAA,GAAW,gBAAgB,QAAA,GAAW,QAAA;AAAA,IAC1D,CAAA,MAAO;AACH,MAAA,eAAA,CAAgB,QAAA,GACZ,gBAAgB,QAAA,GAChB,GAAA,IACC,iBAAkB,MAAA,CAAO,WAAA,GAAc,YAAY,SAAA,GAAa,KAAA,CAAA;AAAA,IACzE;AAEA,IAAA,OAAO;AAAA,MACH,GAAA,EAAK,gBAAgB,QAAA,EAAS;AAAA,MAC9B,MAAM,IAAI,eAAA,CAAgB,EAAE,MAAA,EAAQ,iBAAiB;AAAA,KACzD;AAAA,EACJ;AAEA,EAAA,eAAe,gBAAA,CACX,EAAE,GAAA,EAAK,WAAA,EAAa,QAAA,EAAU,OAAO,GAAA,EAAK,OAAA,EAAQ,EAClD,QAAA,EACA,IAAA,EACF;AACE,IAAA,IAAI,CAAC,WAAA,EAAa,MAAM,IAAI,aAAa,qBAAqB,CAAA;AAC9D,IAAA,MAAM,gBAAA,GAAmBG,YAAU,WAAW,CAAA;AAC9C,IAAA,IAAI,iBAAiB,MAAA,IAAU,CAAA,EAAG,MAAM,IAAI,aAAa,qBAAqB,CAAA;AAC9E,IAAA,MAAM,WAAA,GAAc,iBAAiB,CAAC,CAAA;AACtC,IAAA,MAAM,UAAA,GAAa,OAAO,WAAA,IAAe,QAAA;AAEzC,IAAA,MAAM,YAAA,GAAe,gBAAA,CAAiB,UAAA,GAAa,WAAA,GAAc,YAAY,QAAQ,CAAA;AACrF,IAAA,MAAM,YAAA,GAAe,iBAAiB,MAAA,IAAU,CAAA;AAChD,IAAA,MAAM,cAAA,GAAiB,IAAA,IAAA,CAAA;AAEvB,IAAA,MAAM,SAAA,GAAY,gBAAgB,CAAC,KAAA,EAAO,QAAQ,KAAA,EAAO,MAAM,CAAA,CAAE,QAAA,CAAS,YAAY,CAAA;AAEtF,IAAA,MAAM,QAAA,GAAW,gBAAA,CAAiB,MAAA,CAAO,CAAC,CAAA,KAAM,gBAAA,CAAiB,OAAO,CAAA,IAAK,QAAA,GAAW,CAAA,GAAI,CAAA,CAAE,QAAQ,KAAK,KAAK,CAAA;AAChH,IAAA,MAAM,iBAAA,GAAoB,gBAAA,CAAiB,MAAA,CAAO,CAAC,CAAA,KAAM,gBAAA,CAAiB,OAAO,CAAA,IAAK,QAAA,GAAW,CAAA,GAAI,CAAA,CAAE,QAAQ,KAAK,KAAK,CAAA;AAEzH,IAAA,MAAM,gBAAA,GAAmB,iBAAA,CAAkB,MAAA,IAAU,CAAA,GAAI,EAAC,GAAI,MAAM,GAAA,CAAI,gBAAA,CAAiB,iBAAA,EAAmB,QAAA,EAAU,IAAI,CAAA;AAE1H,IAAA,MAAM,kBAAoC,EAAC;AAC3C,IAAA,IAAI,kBAAA,GAAqB,iBAAiB,MAAA,GAAS,CAAA;AAEnD,IAAA,MAAM,gBAAgB,gBAAA,EAAiB;AAEvC,IAAA,MAAM,EAAE,aAAA,EAAe,QAAA,KAAa,cAAA,CAAe,IAAA,EAAM,KAAK,QAAQ,CAAA;AACtE,IAAA,GAAA,GAAM,QAAA;AAEN,IAAA,MAAM,kBAAkB,aAAA,CAAc,MAAA,GAAS,CAAA,IAAK,cAAA,IAAkB,kBAAkB,MAAA,IAAU,CAAA;AAElG,IAAA,MAAM,WAAA,GAAc,kBAAkB,MAAA,GAAS,CAAA;AAC/C,IAAA,IAAI,QAAA,GAAW,KAAK,GAAA,EAAI;AACxB,IAAA,KAAA,MAAW,cAAc,gBAAA,EAAkB;AACvC,MAAA,IAAI,IAAA;AACJ,MAAA,QAAQ,WAAW,QAAA;AAAU,QACzB,KAAK,OAAA,EAAS;AACV,UAAA,IAAA,GAAO;AAAA,YACH,UAAU,UAAA,CAAW,QAAA;AAAA,YACrB,MAAA,EAAQ;AAAA,cACJ,SAAS,UAAA,CAAW,OAAA;AAAA,cACpB,QAAA,EAAA,CAAW,YAAY,QAAA,EAAS;AAAA,cAChC,IAAA,EAAM,GAAA;AAAA,cACN,OAAO,UAAA,CAAW,KAAA;AAAA,cAClB,QAAQ,UAAA,CAAW,MAAA;AAAA,cACnB,IAAA,EAAM,cAAA,GAAiB,MAAA,GAAY,MAAA,CAAO,QAAQ,CAAA;AAAA,cAClD,IAAA,EAAM,cAAA,GAAiB,MAAA,CAAO,QAAQ,CAAA,GAAI,MAAA;AAAA,cAC1C,QAAQ,UAAA,CAAW,SAAA;AAAA,cACnB,OAAO,UAAA,CAAW,KAAA;AAAA,cAClB,UAAU,UAAA,CAAW,QAAA;AAAA,cACrB,MAAA,EAAQ,cAAA,GAAiB,UAAA,CAAW,SAAA,GAAY,MAAA;AAAA,cAChD,SAAA,EAAW,cAAA,GAAiB,MAAA,GAAY,UAAA,CAAW,SAAA;AAAA,cACnD,MAAA,EAAQ,MAAA,CAAO,UAAA,CAAW,SAAS,CAAA;AAAA,cACnC,OAAA,EAAS,EAAA;AAAA,cACT,KAAK,GAAA,IAAA,IAAA,GAAA,GAAA,GAAO,CAAA;AAAA,cACZ,GAAA,EAAK,uBAAA;AAAA,cAEL,aAAA,EAAe,cAAc,aAAA,GAAgB,MAAA;AAAA,cAC7C,aAAA,EAAe,cAAc,CAAA,GAAI,MAAA;AAAA,cACjC,SAAA,EAAW,cAAc,kBAAA,EAAA,GAAuB,MAAA;AAAA,cAChD,gBAAA,EAAkB,WAAA,GAAc,gBAAA,CAAiB,MAAA,GAAS,MAAA;AAAA,cAE1D,WAAA,EACI,mBAAmB,SAAA,IAAa,CAAC,QAAQ,IAAA,CAAK,SAAA,CAAU,aAAa,CAAA,GAAI;AAAA,aACjF;AAAA,YACA,IAAA,EAAM,IAAI,eAAA;AAAgB,WAC9B;AACA,UAAA;AAAA,QACJ;AAAA,QAEA,KAAK,OAAA,EAAS;AACV,UAAA,IAAA,GAAO;AAAA,YACH,UAAU,UAAA,CAAW,QAAA;AAAA,YACrB,MAAA,EAAQ;AAAA,cACJ,QAAQ,UAAA,CAAW,MAAA;AAAA,cACnB,UAAU,UAAA,CAAW,QAAA;AAAA,cACrB,WAAA,EAAa,EAAA;AAAA,cACb,SAAA,EAAW,gBAAA,CAAiB,UAAA,CAAW,QAAQ,CAAA;AAAA,cAC/C,WAAW,UAAA,CAAW,SAAA;AAAA,cACtB,UAAU,UAAA,CAAW,QAAA;AAAA,cACrB,UAAU,UAAA,CAAW,YAAA;AAAA,cACrB,KAAA,EAAO,CAAA;AAAA,cACP,SAAA,EAAW,CAAA;AAAA,cACX,KAAA,EAAO,IAAA;AAAA,cACP,IAAA,EAAM,cAAA,GAAiB,MAAA,GAAY,MAAA,CAAO,QAAQ,CAAA;AAAA,cAClD,IAAA,EAAM,cAAA,GAAiB,MAAA,CAAO,QAAQ,CAAA,GAAI,MAAA;AAAA,cAC1C,SAAS,UAAA,CAAW,OAAA;AAAA,cACpB,OAAA,EAAS,EAAA;AAAA,cACT,KAAK,GAAA,IAAA,IAAA,GAAA,GAAA,GAAO;AAAA,aAChB;AAAA,YACA,IAAA,EAAM,IAAI,eAAA;AAAgB,WAC9B;AACA,UAAA;AAAA,QACJ;AAAA,QAEA,KAAK,QAAA,EAAU;AACX,UAAA,IAAA,GAAO;AAAA,YACH,UAAU,UAAA,CAAW,QAAA;AAAA,YACrB,MAAA,EAAQ;AAAA,cACJ,QAAQ,UAAA,CAAW,MAAA;AAAA,cACnB,UAAU,UAAA,CAAW,QAAA;AAAA,cACrB,WAAA,EAAa,EAAA;AAAA,cACb,SAAA,EAAW,gBAAA,CAAiB,UAAA,CAAW,QAAQ,CAAA;AAAA,cAC/C,WAAW,UAAA,CAAW,SAAA;AAAA,cACtB,UAAU,UAAA,CAAW,QAAA;AAAA,cACrB,UAAU,UAAA,CAAW,YAAA;AAAA,cACrB,KAAA,EAAO,CAAA;AAAA,cACP,SAAA,EAAW,CAAA;AAAA,cACX,KAAA,EAAO,IAAA;AAAA,cACP,IAAA,EAAM,cAAA,GAAiB,MAAA,GAAY,MAAA,CAAO,QAAQ,CAAA;AAAA,cAClD,IAAA,EAAM,cAAA,GAAiB,MAAA,CAAO,QAAQ,CAAA,GAAI,MAAA;AAAA,cAC1C,SAAS,UAAA,CAAW,OAAA;AAAA,cACpB,OAAA,EAAS,EAAA;AAAA,cACT,KAAK,GAAA,IAAA,IAAA,GAAA,GAAA,GAAO;AAAA,aAChB;AAAA,YACA,IAAA,EAAM,IAAI,eAAA;AAAgB,WAC9B;AACA,UAAA;AAAA,QACJ;AAAA;AAGJ,MAAA,aAAA,CAAc,IAAA,CAAK,QAAQ,OAAO,CAAA;AAElC,MAAA,mBAAA,CAAoB,KAAK,MAAM,CAAA;AAC/B,MAAA,MAAM,kBAAkB,KAAA,CAAM,SAAA,CAAU,KAAK,SAAA,CAAU,IAAA,CAAK,MAAM,CAAC,CAAA;AACnE,MAAA,IAAI,CAAC,eAAA,EAAiB,MAAM,IAAI,aAAa,2BAA2B,CAAA;AAExE,MAAA,IAAA,CAAK,IAAA,CAAK,MAAA,CAAO,QAAA,EAAU,eAAe,CAAA;AAC1C,MAAA,eAAA,CAAgB,KAAK,IAAI,CAAA;AAAA,IAC7B;AAEA,IAAA,KAAA,MAAW,OAAO,QAAA,EAAU;AACxB,MAAA,MAAMS,WAAAA,GAAa,OAAO,GAAA,IAAO,QAAA;AACjC,MAAA,MAAM,OAAA,GAAUA,WAAAA,GAAa,MAAM,cAAA,CAAe,GAAA,EAAK,GAAG,CAAA,GAAI,aAAA,CAAA,cAAA,CAAA,EAAA,EAAK,GAAA,CAAI,QAAA,CAAA,EAAT,EAAmB,QAAA,EAAU,IAAI,QAAA,EAAS,CAAA;AACxG,MAAA,IAAI,mBAAA,CAAoB,QAAQ,SAAU,CAAA;AACtC,QAAA,MAAM,IAAI,YAAA;AAAA,UACN,CAAA,KAAA,EAAQA,cAAa,WAAA,CAAY,GAAG,IAAI,GAAA,CAAI,QAAQ,CAAA,6BAAA,EAAgC,SAAA,CAAU,sBAAsB,CAAA,EAAA;AAAA,SACxH;AAEJ,MAAA,MAAM,WAAW,MAAM,OAAA,CAAQ,GAAA,EAAK,WAAA,CAAY,wBAA2B,CAAA;AAE3E,MAAA,MAAM,QAAA,GAAW,IAAIP,SAAAA,EAAS;AAC9B,MAAA,QAAA,CAAS,MAAA,CAAO,gBAAgBO,WAAAA,GAAa,MAAMR,IAAG,QAAA,CAAS,GAAG,CAAA,GAAI,GAAA,CAAI,IAAA,EAAM;AAAA,QAC5E,QAAA,EAAUQ,WAAAA,GAAa,WAAA,CAAY,GAAG,IAAI,GAAA,CAAI,QAAA;AAAA,QAC9C,WAAA,EAAa;AAAA,OAChB,CAAA;AAED,MAAA,MAAM,MAAA,GAAS;AAAA,QACX,QAAA,EAAU,IAAA,CAAK,GAAA,EAAI,CAAE,QAAA,EAAS;AAAA,QAC9B,UAAU,OAAA,CAAQ,QAAA;AAAA,QAClB,WAAW,OAAA,CAAQ,SAAA;AAAA,QACnB,OAAO,OAAA,CAAQ,KAAA;AAAA,QACf,QAAQ,OAAA,CAAQ,MAAA;AAAA,QAChB,GAAA;AAAA,QACA,IAAA,EAAM,CAAA;AAAA,QACN,KAAK,GAAA,IAAA,IAAA,GAAA,GAAA,GAAO,CAAA;AAAA,QACZ,UAAA,EAAY,iBAAiB,CAAA,GAAI,MAAA;AAAA,QACjC,IAAA,EAAM,iBAAiB,MAAA,GAAY,QAAA;AAAA,QACnC,IAAA,EAAM,iBAAiB,QAAA,GAAW,MAAA;AAAA,QAClC,OAAO,QAAA,CAAS,GAAA;AAAA,QAChB,WAAW,MAAM,qBAAA,CAAsB,GAAA,EAAK,OAAA,CAAQ,SAAU,CAAA,EAAG,IAAA;AAAA,QACjE,UAAA,EAAY,CAAA;AAAA,QACZ,OAAA,EAAS;AAAA,OACb;AAEA,MAAA,aAAA,CAAc,QAAQ,OAAO,CAAA;AAE7B,MAAA,mBAAA,CAAoB,MAAM,CAAA;AAC1B,MAAA,MAAM,kBAAkB,KAAA,CAAM,SAAA,CAAU,IAAA,CAAK,SAAA,CAAU,MAAM,CAAC,CAAA;AAC9D,MAAA,IAAI,CAAC,eAAA,EAAiB,MAAM,IAAI,aAAa,2BAA2B,CAAA;AAExE,MAAA,eAAA,CAAgB,IAAA,CAAK;AAAA,QACjB,KAAA,EAAO;AAAA,UACH,MAAA,EAAQ,eAAA;AAAA,UACR,IAAA,EAAM;AAAA,SACV;AAAA,QACA,IAAA,EAAM,SAAS,SAAA,EAAU;AAAA,QACzB,OAAA,EAAS,SAAS,UAAA,EAAW;AAAA,QAC7B,QAAA,EAAU;AAAA,OACb,CAAA;AAAA,IACL;AAEA,IAAA,MAAM,YAAY,EAAC;AAEnB,IAAA,KAAA,MAAW,QAAQ,eAAA,EAAiB;AAChC,MAAA,SAAA,CAAU,IAAA,CAAK;AAAA,QACX,KAAK,KAAA,CAAM,OAAA;AAAA,UACP,YAAY,UAAA,CAAW,IAAI,CAAA,GAAI,iBAAA,CAAkB,KAAK,QAAQ,CAAA;AAAA,UAC9DZ,OAAAA;AAAA,YACI;AAAA,cACI,MAAA,EAAQ;AAAA,aACZ;AAAA,YACA,IAAA,CAAK,SAAS;AAAC;AACnB,SACJ;AAAA,QACA,MAAM,IAAA,CAAK,IAAA;AAAA,QACX,SAAS,IAAA,CAAK,QAAA,IAAY,KAAA,GAAQ,IAAA,CAAK,UAAU;AAAC,OACrD,CAAA;AAAA,IACL;AAEA,IAAA,OAAO,SAAA;AAAA,EACX;AAYA,EAAA,OAAO,eAAe,WAAA,CAClB,OAAA,EACA,QAAA,EACA,IAAA,GAAA,CAAA,aACF;AACE,IAAA,IAAI,CAAC,OAAA,EAAS,MAAM,IAAI,aAAa,yBAAyB,CAAA;AAC9D,IAAA,IAAI,CAAC,QAAA,EAAU,MAAM,IAAI,aAAa,kBAAkB,CAAA;AACxD,IAAA,IAAI,OAAO,OAAA,IAAW,QAAA,EAAU,OAAA,GAAU,EAAE,KAAK,OAAA,EAAQ;AAEzD,IAAA,IAAI,EAAE,GAAA,EAAK,QAAA,EAAS,GAAI,OAAA;AACxB,IAAA,MAAM,EAAE,aAAY,GAAI,OAAA;AACxB,IAAA,MAAM,EAAE,KAAA,EAAO,GAAA,EAAK,MAAA,EAAQ,SAAQ,GAAI,OAAA;AAExC,IAAA,MAAM,gBAAA,GAAmB,WAAA,GAAcG,WAAAA,CAAU,WAAW,IAAI,EAAC;AAEjE,IAAA,IAAI,CAAC,GAAA,IAAO,gBAAA,CAAiB,MAAA,IAAU,CAAA;AACnC,MAAA,MAAM,IAAI,aAAa,yBAAyB,CAAA;AAEpD,IAAA,IAAI,gBAAA,CAAiB,MAAA,GAAS,CAAA,IAAK,eAAA,CAAgB,iBAAiB,MAAM,CAAA;AACtE,MAAA,MAAM,IAAI,YAAA,CAAa,yBAAA,GAA4B,SAAA,CAAU,QAAQ,CAAA;AAEzE,IAAA,MAAM,SAAA,GAGF;AAAA,MACA,OAAA,EAAS,IAAA;AAAA,MACT,YAAY;AAAC,KACjB;AAEA,IAAA,IAAI,gBAAA,CAAiB,SAAS,CAAA,EAAG;AAC7B,MAAA,MAAM,YAAA,GAAe,gBAAA;AAAA,QACjB,OAAO,gBAAA,CAAiB,CAAC,CAAA,IAAK,QAAA,GAAW,iBAAiB,CAAC,CAAA,GAAI,gBAAA,CAAiB,CAAC,CAAA,CAAE;AAAA,OACvF;AACA,MAAA,MAAM,YAAA,GAAe,iBAAiB,MAAA,IAAU,CAAA;AAEhD,MAAA,MAAM,SAAA,GAAY,gBAAgB,CAAC,KAAA,EAAO,QAAQ,KAAA,EAAO,MAAM,CAAA,CAAE,QAAA,CAAS,YAAY,CAAA;AACtF,MAAA,IAAK,CAAC,aAAa,GAAA,CAAI,MAAA,GAAS,KAAO,GAAA,CAAI,MAAA,GAAS,KAAK,KAAA,EAAQ;AAE7D,QAAA,MAAM,cAAc,OAAA,EAAS,QAAA,EAAU,IAAI,CAAA,CAAE,IAAA,CAAK,OAAO,IAAA,KAAS;AAC9D,UAAA,SAAA,CAAU,OAAA,GAAA,CAAW,MAAM,IAAA,CAAK,IAAI,GAAG,CAAC,CAAA;AAAA,QAC5C,CAAC,CAAA;AACD,QAAA,GAAA,GAAM,EAAA;AACN,QAAA,QAAA,GAAW,MAAA;AAAA,MACf;AACA,MAAA,MAAM,cAAc,MAAM,gBAAA;AAAA,QACtB,EAAE,GAAA,EAAK,QAAA,EAAU,aAAa,KAAA,EAAO,GAAA,EAAa,OAAA,EAAQ;AAAA,QAC1D,QAAA;AAAA,QACA;AAAA,OACJ;AACA,MAAA,SAAA,CAAU,UAAA,GAAa,MAAM,IAAA,CAAK,WAAW,CAAA;AAC7C,MAAA,GAAA,GAAM,EAAA;AAAA,IACV;AAEA,IAAA,IAAI,GAAA,CAAI,SAAS,CAAA,EAAG;AAChB,MAAA,MAAM,WAAA,GAAc,MAAM,aAAA,CAAc,OAAA,EAAS,UAAU,IAAI,CAAA;AAC/D,MAAA,SAAA,CAAU,OAAA,GAAA,CAAW,MAAM,IAAA,CAAK,WAAW,GAAG,CAAC,CAAA;AAAA,IACnD;AAEA,IAAA,OAAO,SAAA;AAAA,EACX,CAAA;AACJ,CAAC,CAAA;;;AC/pBM,IAAK,YAAA,qBAAAU,aAAAA,KAAL;AACH,EAAAA,aAAAA,CAAAA,aAAAA,CAAA,eAAY,CAAA,CAAA,GAAZ,WAAA;AACA,EAAAA,aAAAA,CAAAA,aAAAA,CAAA,WAAQ,CAAA,CAAA,GAAR,OAAA;AACA,EAAAA,aAAAA,CAAAA,aAAAA,CAAA,WAAQ,CAAA,CAAA,GAAR,OAAA;AACA,EAAAA,aAAAA,CAAAA,aAAAA,CAAA,WAAQ,CAAA,CAAA,GAAR,OAAA;AAJQ,EAAA,OAAAA,aAAAA;AAAA,CAAA,EAAA,YAAA,IAAA,EAAA;AAoBL,IAAM,oBAAoB,UAAA,EAA+B,CAAE,CAAC,GAAA,EAAK,KAAK,KAAA,KAAU;AACnF,EAAA,MAAM,UAAA,GAAa;AAAA,IACf,CAAA,CAAA,cAAmB,KAAA,CAAM,OAAA,CAAQ,CAAA,EAAG,IAAI,aAAA,CAAc,OAAA,CAAQ,CAAC,CAAC,CAAA,oBAAA,CAAsB,CAAA;AAAA,IACtF,CAAA,CAAA,eAAoB,KAAA,CAAM,OAAA,CAAQ,CAAA,EAAG,IAAI,aAAA,CAAc,OAAA,CAAQ,CAAC,CAAC,CAAA,+BAAA,CAAiC;AAAA,GACtG;AAYA,EAAA,OAAO,eAAe,UAAA,CAAW,OAAA,EAA4B,QAAA,EAAkB,IAAA,GAAA,CAAA,aAAoC;AAC/G,IAAA,MAAM,SACF,IAAA,IAAA,CAAA,cACM;AAAA,MACI,IAAA,EAAM,QAAA;AAAA,MACN,KAAA,EAAO,gBAAA;AAAA,MACP,MAAA,EAAQ,OAAA,CAAQ,MAAA,CAAO,QAAA,EAAS;AAAA,MAChC,OAAA,EAAS,OAAA,CAAQ,MAAA,IAAU,CAAA,eAAqB,QAAQ,OAAA,GAAU;AAAA,KACtE,GACA;AAAA,MACI,KAAA,EAAO,QAAA;AAAA,MACP,IAAA,EAAM,EAAA;AAAA,MACN,QAAQ,OAAA,CAAQ,MAAA;AAAA,MAChB,OAAA,EAAS,OAAA,CAAQ,MAAA,IAAU,CAAA,eAAqB,QAAQ,OAAA,GAAU,EAAA;AAAA,MAClE,MAAM,GAAA,CAAI;AAAA,KACd;AAEV,IAAA,mBAAA,CAAoB,MAAM,CAAA;AAE1B,IAAA,MAAM,kBAAkB,KAAA,CAAM,SAAA,CAAU,IAAA,CAAK,SAAA,CAAU,MAAM,CAAC,CAAA;AAC9D,IAAA,IAAI,CAAC,eAAA,EAAiB,MAAM,IAAI,aAAa,0BAA0B,CAAA;AAEvE,IAAA,MAAM,WAAW,MAAM,KAAA,CAAM,OAAA,CAAQ,UAAA,CAAW,IAAI,CAAA,EAAG;AAAA,MACnD,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,IAAI,eAAA,CAAgB;AAAA,QACtB,MAAA,EAAQ;AAAA,OACX;AAAA,KACJ,CAAA;AAED,IAAA,OAAO,KAAA,CAAM,QAAQ,QAAQ,CAAA;AAAA,EACjC,CAAA;AACJ,CAAC,CAAA;AC9BM,IAAM,uBAAuB,UAAA,EAAkC,CAAE,CAAC,GAAA,EAAK,KAAK,KAAA,KAAU;AACzF,EAAA,MAAM,UAAA,GAAa;AAAA,IACf,CAAA,CAAA,cAAmB,KAAA,CAAM,OAAA,CAAQ,CAAA,EAAG,IAAI,aAAA,CAAc,IAAA,CAAK,CAAC,CAAC,CAAA,mBAAA,CAAA,EAAuB;AAAA,MAChF,MAAA,EAAQ;AAAA,KACX,CAAA;AAAA,IACD,CAAA,CAAA,eAAoB,KAAA,CAAM,OAAA,CAAQ,CAAA,EAAG,IAAI,aAAA,CAAc,KAAA,CAAM,CAAC,CAAC,CAAA,iBAAA,CAAA,EAAqB;AAAA,MAChF,MAAA,EAAQ;AAAA,KACX;AAAA,GACL;AAUA,EAAA,OAAO,eAAe,aAAA,CAClB,QAAA,EACA,IAAA,GAAA,CAAA,aACF;AACE,IAAA,IAAI,CAAC,QAAA,EAAU,MAAM,IAAI,aAAa,sDAAsD,CAAA;AAC5F,IAAA,MAAM,aAAA,GAAgBV,YAAU,QAAQ,CAAA;AACxC,IAAA,IAAI,aAAA,CAAc,MAAA,KAAW,CAAA,IAAK,aAAA,CAAc,MAAA,GAAS,qBAAA;AACrD,MAAA,MAAM,IAAI,aAAa,kDAAkD,CAAA;AAE7E,IAAA,MAAM,OAAA,GAAU,IAAA,KAAA,CAAA;AAChB,IAAA,MAAM,QAAA,GAAW,UAAU,aAAA,CAAc,CAAC,EAAE,IAAA,GAAO,aAAA,CAAc,CAAC,CAAA,CAAE,OAAA;AAEpE,IAAA,MAAM,QAAA,GAAqB;AAAA,MACvB,IAAA,EAAM,aAAA,CAAc,GAAA,CAAI,CAAC,GAAA,KAAQ;AAC7B,QAAA,MAAM,WAAA,GAAc,OAAA,GAAU,GAAA,CAAI,IAAA,GAAO,GAAA,CAAI,OAAA;AAC7C,QAAA,IAAI,gBAAgB,QAAA,EAAU;AAC1B,UAAA,MAAM,IAAI,aAAa,8CAA8C,CAAA;AAAA,QACzE;AACA,QAAA,OAAO;AAAA,UACH,KAAK,GAAA,CAAI,QAAA;AAAA,UACT,KAAK,GAAA,CAAI,KAAA;AAAA,UACT,IAAI,GAAA,CAAI,OAAA;AAAA,UACR,IAAI,GAAA,CAAI,IAAA,KAAS,GAAA,CAAI,GAAA,GAAM,MAAM,GAAA,CAAI,IAAA;AAAA,UACrC,IAAI,GAAA,CAAI,OAAA;AAAA,UACR,IAAI,GAAA,CAAI,EAAA,IAAM,CAAA,KAAM,GAAA,CAAI,KAAK,CAAA,GAAI,EAAA;AAAA,UACjC,IAAI,GAAA,CAAI,EAAA,IAAM,CAAA,KAAM,GAAA,CAAI,KAAK,CAAA,GAAI,EAAA;AAAA,UACjC,KAAK,GAAA,CAAI,GAAA,IAAO,CAAA,KAAM,GAAA,CAAI,MAAM,CAAA,GAAI,EAAA;AAAA,UACpC,EAAA,EAAI,QAAA,CAAS,CAAA,EAAG,GAAA,CAAI,EAAE,CAAA,CAAE,CAAA,IAAK,CAAA,KAAM,QAAA,CAAS,CAAA,EAAG,GAAA,CAAI,EAAE,CAAA,CAAE,IAAI,CAAA,GAAI;AAAA,SACnE;AAAA,MACJ,CAAC,CAAA;AAAA,MACD,CAAC,OAAA,GAAU,MAAA,GAAS,UAAU,GAAG;AAAA,KACrC;AAEA,IAAA,MAAM,MAAA,GAAS,cAAA,CAAA;AAAA,MACX,QAAA,EAAU,IAAA,CAAK,SAAA,CAAU,QAAQ;AAAA,KAAA,EAC7B,UAAU,EAAE,IAAA,EAAM,GAAA,CAAI,IAAA,KAAS,EAAC,CAAA;AAGxC,IAAA,MAAM,kBAAkB,KAAA,CAAM,SAAA,CAAU,IAAA,CAAK,SAAA,CAAU,MAAM,CAAC,CAAA;AAC9D,IAAA,IAAI,CAAC,eAAA,EAAiB,MAAM,IAAI,aAAa,0BAA0B,CAAA;AAEvE,IAAA,MAAM,WAAW,MAAM,KAAA,CAAM,OAAA,CAAQ,UAAA,CAAW,IAAI,CAAA,EAAG;AAAA,MACnD,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,IAAI,eAAA,CAAgB;AAAA,QACtB,MAAA,EAAQ;AAAA,OACX;AAAA,KACJ,CAAA;AAED,IAAA,OAAO,KAAA,CAAM,QAAQ,QAAQ,CAAA;AAAA,EACjC,CAAA;AACJ,CAAC,CAAA;;;AC/FM,IAAM,qBAAqB,UAAA,EAAgC,CAAE,CAAC,GAAA,EAAK,KAAK,KAAA,KAAU;AACrF,EAAA,MAAM,UAAA,GAAa;AAAA,IACf,CAAA,CAAA,cAAmB,KAAA,CAAM,OAAA,CAAQ,CAAA,EAAG,IAAI,aAAA,CAAc,IAAA,CAAK,CAAC,CAAC,CAAA,oBAAA,CAAA,EAAwB;AAAA,MACjF,MAAA,EAAQ;AAAA,KACX,CAAA;AAAA,IACD,CAAA,CAAA,eAAoB,KAAA,CAAM,OAAA,CAAQ,CAAA,EAAG,IAAI,aAAA,CAAc,KAAA,CAAM,CAAC,CAAC,CAAA,kBAAA,CAAA,EAAsB;AAAA,MACjF,MAAA,EAAQ;AAAA,KACX;AAAA,GACL;AAWA,EAAA,OAAO,eAAe,WAAA,CAAY,OAAA,EAA6B,QAAA,EAAkB,IAAA,GAAA,CAAA,aAAoC;AACjH,IAAA,IAAI,CAAC,OAAA,EAAS,MAAM,IAAI,aAAa,iBAAiB,CAAA;AACtD,IAAA,IAAI,CAAC,QAAA,EAAU,MAAM,IAAI,aAAa,kBAAkB,CAAA;AAExD,IAAA,IAAI,CAAC,OAAA,CAAQ,EAAA,EAAI,MAAM,IAAI,aAAa,oBAAoB,CAAA;AAC5D,IAAA,IAAI,CAAC,OAAA,CAAQ,MAAA,EAAQ,MAAM,IAAI,aAAa,wBAAwB,CAAA;AACpE,IAAA,IAAI,CAAC,OAAA,CAAQ,IAAA,EAAM,MAAM,IAAI,aAAa,sBAAsB,CAAA;AAEhE,IAAA,MAAM,cAAA,GAAiB,IAAA,KAAA,CAAA;AAEvB,IAAA,MAAM,MAAA,GAAS;AAAA,MACX,WAAW,OAAA,CAAQ,EAAA;AAAA,MACnB,QAAQ,OAAA,CAAQ,MAAA;AAAA,MAChB,MAAM,OAAA,CAAQ,IAAA;AAAA,MACd,QAAA,EAAU,KAAK,GAAA,EAAI;AAAA,MACnB,MAAM,GAAA,CAAI,IAAA;AAAA,MACV,OAAA,EAAS,GAAA;AAAA,MACT,IAAA,EAAM,iBAAiB,MAAA,GAAY,QAAA;AAAA,MACnC,IAAA,EAAM,iBAAiB,QAAA,GAAW;AAAA,KACtC;AAEA,IAAA,mBAAA,CAAoB,MAAM,CAAA;AAE1B,IAAA,MAAM,kBAAkB,KAAA,CAAM,SAAA,CAAU,IAAA,CAAK,SAAA,CAAU,MAAM,CAAC,CAAA;AAC9D,IAAA,IAAI,CAAC,eAAA,EAAiB,MAAM,IAAI,aAAa,2BAA2B,CAAA;AAExE,IAAA,MAAM,WAAW,MAAM,KAAA,CAAM,OAAA,CAAQ,UAAA,CAAW,IAAI,CAAA,EAAG;AAAA,MACnD,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,IAAI,eAAA,CAAgB;AAAA,QACtB,MAAA,EAAQ;AAAA,OACX;AAAA,KACJ,CAAA;AAED,IAAA,OAAO,KAAA,CAAM,QAAQ,QAAQ,CAAA;AAAA,EACjC,CAAA;AACJ,CAAC,CAAA;;;AC5DM,IAAM,yBAAyB,UAAA,EAAoC,CAAE,CAAC,GAAA,EAAK,KAAK,KAAA,KAAU;AAC7F,EAAA,MAAM,UAAA,GAAa;AAAA,IACf,CAAA,CAAA,cAAmB,KAAA,CAAM,OAAA,CAAQ,CAAA,EAAG,IAAI,aAAA,CAAc,IAAA,CAAK,CAAC,CAAC,CAAA,mBAAA,CAAqB,CAAA;AAAA,IAClF,CAAA,CAAA,eAAoB,KAAA,CAAM,OAAA,CAAQ,CAAA,EAAG,IAAI,aAAA,CAAc,KAAA,CAAM,CAAC,CAAC,CAAA,iBAAA,CAAmB;AAAA,GACtF;AAWA,EAAA,OAAO,eAAe,eAAA,CAClB,QAAA,EACA,IAAA,GAAA,CAAA,aACA,QAAA,GAAA,CAAA,aACF;AACE,IAAA,IAAI,CAAC,QAAA,EAAU,MAAM,IAAI,aAAa,kBAAkB,CAAA;AAExD,IAAA,MAAM,MAAA,GAAS,aAAA,CAAA,cAAA,CAAA;AAAA,MACX,CAAC,IAAA,KAAA,CAAA,cAA2B,MAAA,GAAS,MAAM,GAAG;AAAA,KAAA,EAC1C,IAAA,KAAA,CAAA,cAA2B,EAAE,QAAA,EAAS,GAAI,EAAC,CAAA,EAFpC;AAAA,MAGX,MAAM,GAAA,CAAI;AAAA,KACd,CAAA;AAEA,IAAA,MAAM,kBAAkB,KAAA,CAAM,SAAA,CAAU,IAAA,CAAK,SAAA,CAAU,MAAM,CAAC,CAAA;AAC9D,IAAA,IAAI,CAAC,eAAA,EAAiB,MAAM,IAAI,aAAa,0BAA0B,CAAA;AAEvE,IAAA,MAAM,WAAW,MAAM,KAAA,CAAM,OAAA,CAAQ,UAAA,CAAW,IAAI,CAAA,EAAG;AAAA,MACnD,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,IAAI,eAAA,CAAgB;AAAA,QACtB,MAAA,EAAQ;AAAA,OACX;AAAA,KACJ,CAAA;AAED,IAAA,OAAO,KAAA,CAAM,QAAQ,QAAQ,CAAA;AAAA,EACjC,CAAA;AACJ,CAAC,CAAA;;;ACTM,IAAM,mBAAmB,UAAA,EAA8B,CAAE,CAAC,GAAA,EAAK,KAAK,KAAA,KAAU;AACjF,EAAA,MAAM,UAAA,GAAa;AAAA,IACf,CAAA,CAAA,cAAmB,KAAA,CAAM,OAAA,CAAQ,CAAA,EAAG,IAAI,aAAA,CAAc,IAAA,CAAK,CAAC,CAAC,CAAA,oBAAA,CAAsB,CAAA;AAAA,IACnF,CAAA,CAAA,eAAoB,KAAA,CAAM,OAAA,CAAQ,CAAA,EAAG,IAAI,aAAA,CAAc,IAAA,CAAK,CAAC,CAAC,CAAA,kBAAA,CAAoB;AAAA,GACtF;AAsBA,EAAA,OAAO,eAAe,SAAA,CAAU,OAAA,EAA2B,QAAA,EAAkB,IAAA,GAAA,CAAA,aAAoC;AAjErH,IAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA;AAkEQ,IAAA,IAAI,QAAA,GAAmB,CAAA;AACvB,IAAA,MAAM,QAAA,GAAW,KAAK,GAAA,EAAI;AAE1B,IAAA,IAAI;AACA,MAAA,MAAM,YAAA,GAAe,MAAM,KAAA,CAAM,OAAA,CAAQ,OAAA,CAAQ,UAAU,EAAE,MAAA,EAAQ,MAAA,EAAO,EAAG,IAAI,CAAA;AACnF,MAAA,IAAI,aAAa,EAAA,EAAI;AACjB,QAAA,QAAA,GAAW,SAAS,YAAA,CAAa,OAAA,CAAQ,GAAA,CAAI,gBAAgB,KAAK,GAAG,CAAA;AAAA,MACzE;AAAA,IACJ,SAAS,KAAA,EAAgB;AACrB,MAAA,MAAM,IAAI,YAAA;AAAA,QACN,gCAAgC,KAAA,YAAiB,KAAA,GAAQ,MAAM,OAAA,GAAU,MAAA,CAAO,KAAK,CAAC,CAAA;AAAA,OAC1F;AAAA,IACJ;AAEA,IAAA,MAAM,SACF,IAAA,KAAA,CAAA,cACM;AAAA,MACI,IAAA,EAAM,QAAA;AAAA,MACN,QAAA,EAAU,OAAO,QAAQ,CAAA;AAAA,MACzB,GAAA,EAAA,CAAK,EAAA,GAAA,OAAA,CAAQ,GAAA,KAAR,IAAA,GAAA,EAAA,GAAe,CAAA;AAAA,MACpB,OAAA,EAAS,GAAA;AAAA,MACT,OAAA,EAAS,CAAA;AAAA,MACT,OAAA,EAAS,KAAK,SAAA,CAAU;AAAA,QACpB,UAAU,OAAA,CAAQ,QAAA;AAAA,QAClB,UAAU,OAAA,CAAQ,YAAA;AAAA,QAClB,QAAA,EAAA,CAAU,EAAA,GAAA,OAAA,CAAQ,QAAA,KAAR,IAAA,GAAA,EAAA,GAAoB,CAAA;AAAA,QAC9B,KAAA,EAAA,CAAO,EAAA,GAAA,OAAA,CAAQ,KAAA,KAAR,IAAA,GAAA,EAAA,GAAiB,IAAA;AAAA,QACxB,MAAA,EAAA,CAAQ,EAAA,GAAA,OAAA,CAAQ,MAAA,KAAR,IAAA,GAAA,EAAA,GAAkB,GAAA;AAAA,QAC1B,QAAA;AAAA,QACA,UAAA,EAAY;AAAA,UACR,KAAA,EAAO,EAAA;AAAA,UACP,IAAA,EAAM,EAAA;AAAA,UACN,IAAA,EAAM,IAAA;AAAA,UACN,OAAA,EAAS,CAAA;AAAA,UACT,GAAA,EAAK;AAAA,YACD,QAAA,EAAU,EAAA;AAAA,YACV,OAAA,EAAS,EAAA;AAAA,YACT,gBAAA,EAAkB;AAAA;AACtB,SACJ;AAAA,QACA,KAAA,EAAA,CAAO,EAAA,GAAA,OAAA,CAAQ,GAAA,KAAR,IAAA,GAAA,EAAA,GAAe;AAAA,OACzB,CAAA;AAAA,MACD,MAAM,GAAA,CAAI;AAAA,KACd,GACA;AAAA,MACI,IAAA,EAAM,QAAA;AAAA,MACN,UAAA,EAAY,CAAA;AAAA,MACZ,QAAA,EAAU,OAAO,QAAQ,CAAA;AAAA,MACzB,GAAA,EAAA,CAAK,EAAA,GAAA,OAAA,CAAQ,GAAA,KAAR,IAAA,GAAA,EAAA,GAAe,CAAA;AAAA,MACpB,OAAA,EAAS,GAAA;AAAA,MACT,OAAA,EAAS,CAAA;AAAA,MACT,OAAA,EAAS,KAAK,SAAA,CAAU;AAAA,QACpB,UAAU,OAAA,CAAQ,QAAA;AAAA,QAClB,UAAU,OAAA,CAAQ,YAAA;AAAA,QAClB,QAAA,EAAA,CAAU,EAAA,GAAA,OAAA,CAAQ,QAAA,KAAR,IAAA,GAAA,EAAA,GAAoB,CAAA;AAAA,QAC9B,KAAA,EAAA,CAAO,EAAA,GAAA,OAAA,CAAQ,KAAA,KAAR,IAAA,GAAA,EAAA,GAAiB,IAAA;AAAA,QACxB,MAAA,EAAA,CAAQ,EAAA,GAAA,OAAA,CAAQ,MAAA,KAAR,IAAA,GAAA,EAAA,GAAkB,GAAA;AAAA,QAC1B,QAAA;AAAA,QACA,UAAA,EAAY;AAAA,UACR,KAAA,EAAO,EAAA;AAAA,UACP,IAAA,EAAM,EAAA;AAAA,UACN,IAAA,EAAM,IAAA;AAAA,UACN,OAAA,EAAS,CAAA;AAAA,UACT,GAAA,EAAK;AAAA,YACD,QAAA,EAAU,EAAA;AAAA,YACV,OAAA,EAAS,EAAA;AAAA,YACT,gBAAA,EAAkB;AAAA;AACtB,SACJ;AAAA,QACA,KAAA,EAAA,CAAO,EAAA,GAAA,OAAA,CAAQ,GAAA,KAAR,IAAA,GAAA,EAAA,GAAe;AAAA,OACzB,CAAA;AAAA,MACD,MAAM,GAAA,CAAI;AAAA,KACd;AAMV,IAAA,IAAI,yBAA4B,IAAA,KAAA,CAAA,cAA2B;AACvD,MAAA,MAAM,IAAI,aAAa,wBAAwB,CAAA;AAAA,IACnD;AAEA,IAAA,MAAM,kBAAkB,KAAA,CAAM,SAAA,CAAU,IAAA,CAAK,SAAA,CAAU,MAAM,CAAC,CAAA;AAC9D,IAAA,IAAI,CAAC,eAAA,EAAiB,MAAM,IAAI,aAAa,0BAA0B,CAAA;AAEvE,IAAA,MAAM,WAAW,MAAM,KAAA,CAAM,OAAA,CAAQ,UAAA,CAAW,IAAI,CAAA,EAAG;AAAA,MACnD,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,IAAI,eAAA,CAAgB;AAAA,QACtB,MAAA,EAAQ;AAAA,OACX;AAAA,KACJ,CAAA;AAED,IAAA,OAAO,KAAA,CAAM,QAAQ,QAAQ,CAAA;AAAA,EACjC,CAAA;AACJ,CAAC,CAAA;;;AChJM,IAAM,mBAAmB,UAAA,EAA8B,CAAE,CAAC,GAAA,EAAK,KAAK,KAAA,KAAU;AACjF,EAAA,MAAM,UAAA,GAAa;AAAA,IACf,CAAA,CAAA,cAAmB,KAAA,CAAM,OAAA,CAAQ,CAAA,EAAG,IAAI,aAAA,CAAc,IAAA,CAAK,CAAC,CAAC,CAAA,oBAAA,CAAsB,CAAA;AAAA,IACnF,CAAA,CAAA,eAAoB,KAAA,CAAM,OAAA,CAAQ,CAAA,EAAG,IAAI,aAAA,CAAc,IAAA,CAAK,CAAC,CAAC,CAAA,kBAAA,CAAoB;AAAA,GACtF;AAWA,EAAA,OAAO,eAAe,SAAA,CAAU,OAAA,EAA2B,QAAA,EAAkB,IAAA,GAAA,CAAA,aAAoC;AA/BrH,IAAA,IAAA,EAAA,EAAA,EAAA;AAgCQ,IAAA,IAAI,QAAA,GAAW,IAAA;AACf,IAAA,MAAM,QAAA,GAAW,IAAA,CAAK,GAAA,EAAI,CAAE,QAAA,EAAS;AAErC,IAAA,IAAI;AACA,MAAA,MAAM,YAAA,GAAe,MAAM,KAAA,CAAM,OAAA,CAAQ,OAAA,CAAQ,UAAU,EAAE,MAAA,EAAQ,MAAA,EAAO,EAAG,IAAI,CAAA;AACnF,MAAA,IAAI,aAAa,EAAA,EAAI;AACjB,QAAA,QAAA,GAAW,SAAS,YAAA,CAAa,OAAA,CAAQ,GAAA,CAAI,gBAAgB,KAAK,GAAG,CAAA;AAAA,MACzE;AAAA,IACJ,SAAS,KAAA,EAAgB;AACrB,MAAA,MAAM,IAAI,YAAA;AAAA,QACN,gCAAgC,KAAA,YAAiB,KAAA,GAAQ,MAAM,OAAA,GAAU,MAAA,CAAO,KAAK,CAAC,CAAA;AAAA,OAC1F;AAAA,IACJ;AAEA,IAAA,MAAM,SACF,IAAA,KAAA,CAAA,cACM;AAAA,MACI,IAAA,EAAM,QAAA;AAAA,MACN,GAAA,EAAA,CAAK,EAAA,GAAA,OAAA,CAAQ,GAAA,KAAR,IAAA,GAAA,EAAA,GAAe,CAAA;AAAA,MACpB,OAAA,EAAS,EAAA;AAAA,MACT,OAAA,EAAS,CAAA;AAAA,MACT,QAAA;AAAA,MACA,OAAA,EAAS,KAAK,SAAA,CAAU;AAAA,QACpB,UAAU,OAAA,CAAQ,QAAA;AAAA,QAClB,QAAQ,OAAA,CAAQ,QAAA;AAAA,QAChB,UAAU,QAAA,IAAA,IAAA,GAAA,QAAA,GAAY;AAAA,OACzB,CAAA;AAAA,MACD,MAAM,GAAA,CAAI;AAAA,KACd,GACA;AAAA,MACI,IAAA,EAAM,QAAA;AAAA,MACN,UAAA,EAAY,CAAA;AAAA,MACZ,GAAA,EAAA,CAAK,EAAA,GAAA,OAAA,CAAQ,GAAA,KAAR,IAAA,GAAA,EAAA,GAAe,CAAA;AAAA,MACpB,OAAA,EAAS,EAAA;AAAA,MACT,OAAA,EAAS,CAAA;AAAA,MACT,QAAA;AAAA,MACA,OAAA,EAAS,KAAK,SAAA,CAAU;AAAA,QACpB,UAAU,OAAA,CAAQ,QAAA;AAAA,QAClB,QAAQ,OAAA,CAAQ,QAAA;AAAA,QAChB,UAAU,QAAA,IAAA,IAAA,GAAA,QAAA,GAAY;AAAA,OACzB,CAAA;AAAA,MACD,MAAM,GAAA,CAAI;AAAA,KACd;AAEV,IAAA,IAAI,yBAA4B,IAAA,KAAA,CAAA,cAA2B;AACvD,MAAA,MAAM,IAAI,aAAa,wBAAwB,CAAA;AAAA,IACnD;AAEA,IAAA,MAAM,kBAAkB,KAAA,CAAM,SAAA,CAAU,IAAA,CAAK,SAAA,CAAU,MAAM,CAAC,CAAA;AAC9D,IAAA,IAAI,CAAC,eAAA,EAAiB,MAAM,IAAI,aAAa,0BAA0B,CAAA;AAEvE,IAAA,MAAM,WAAW,MAAM,KAAA,CAAM,OAAA,CAAQ,UAAA,CAAW,IAAI,CAAA,EAAG;AAAA,MACnD,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,IAAI,eAAA,CAAgB;AAAA,QACtB,MAAA,EAAQ;AAAA,OACX;AAAA,KACJ,CAAA;AAED,IAAA,OAAO,KAAA,CAAM,QAAQ,QAAQ,CAAA;AAAA,EACjC,CAAA;AACJ,CAAC,CAAA;ACpFM,IAAM,gCAAgC,UAAA,EAA2C,CAAE,CAAC,GAAA,EAAK,KAAK,KAAA,KAAU;AAC3G,EAAA,MAAM,UAAA,GAAa,MAAM,OAAA,CAAQ,CAAA,EAAG,IAAI,aAAA,CAAc,YAAA,CAAa,CAAC,CAAC,CAAA,6BAAA,CAA+B,CAAA;AAWpG,EAAA,OAAO,eAAe,sBAAA,CAClB,MAAA,EACA,QAAA,EACA,IAAA,GAAA,CAAA,aACF;AACE,IAAA,MAAM,SAAA,GAAYA,YAAU,QAAQ,CAAA;AACpC,IAAA,IAAI,UAAU,MAAA,KAAW,CAAA,EAAG,MAAM,IAAI,aAAa,sBAAsB,CAAA;AAEzE,IAAA,MAAM,QAAA,GAAW,yBAA4B,CAAA,GAAI,CAAA;AACjD,IAAA,MAAM,MAAA,GAAS;AAAA,MACX,CAAC,MAAA,GAAS,aAAA,GAAgB,aAAa,GAAG,IAAA,CAAK,SAAA;AAAA,QAC3C,SAAA,CAAU,GAAA,CAAI,CAAC,EAAA,MAAQ;AAAA,UACnB,SAAA,EAAW,EAAA;AAAA,UACX;AAAA,SACJ,CAAE;AAAA,OACN;AAAA,MACA,CAAC,MAAA,GAAS,aAAA,GAAgB,aAAa,GAAG,IAAA;AAAA,MAC1C,MAAM,GAAA,CAAI;AAAA,KACd;AAEA,IAAA,MAAM,kBAAkB,KAAA,CAAM,SAAA,CAAU,IAAA,CAAK,SAAA,CAAU,MAAM,CAAC,CAAA;AAC9D,IAAA,IAAI,CAAC,eAAA,EAAiB,MAAM,IAAI,aAAa,0BAA0B,CAAA;AAEvE,IAAA,MAAM,QAAA,GAAW,MAAM,KAAA,CAAM,OAAA,CAAQ,UAAA,EAAY;AAAA,MAC7C,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,IAAI,eAAA,CAAgB;AAAA,QACtB,MAAA,EAAQ;AAAA,OACX;AAAA,KACJ,CAAA;AAED,IAAA,OAAO,KAAA,CAAM,QAAQ,QAAQ,CAAA;AAAA,EACjC,CAAA;AACJ,CAAC,CAAA;;;ACtCM,IAAK,YAAA,qBAAAW,aAAAA,KAAL;AACH,EAAAA,aAAAA,CAAAA,aAAAA,CAAA,cAAW,IAAA,CAAA,GAAX,UAAA;AACA,EAAAA,aAAAA,CAAAA,aAAAA,CAAA,gBAAa,KAAA,CAAA,GAAb,YAAA;AACA,EAAAA,aAAAA,CAAAA,aAAAA,CAAA,aAAU,EAAA,CAAA,GAAV,SAAA;AACA,EAAAA,cAAA,WAAA,CAAA,GAAY,UAAA;AAJJ,EAAA,OAAAA,aAAAA;AAAA,CAAA,EAAA,YAAA,IAAA,EAAA;AAOL,IAAK,UAAA,qBAAAC,WAAAA,KAAL;AACH,EAAAA,WAAAA,CAAAA,WAAAA,CAAA,UAAO,CAAA,CAAA,GAAP,MAAA;AACA,EAAAA,WAAAA,CAAAA,WAAAA,CAAA,YAAS,CAAA,CAAA,GAAT,QAAA;AAFQ,EAAA,OAAAA,WAAAA;AAAA,CAAA,EAAA,UAAA,IAAA,EAAA;AAKL,IAAM,iBAAiB,UAAA,EAA4B,CAAE,CAAC,GAAA,EAAK,KAAK,KAAA,KAAU;AAC7E,EAAA,MAAM,UAAA,GAAa,MAAM,OAAA,CAAQ,CAAA,EAAG,IAAI,aAAA,CAAc,OAAA,CAAQ,CAAC,CAAC,CAAA,2BAAA,CAA6B,CAAA;AAW7F,EAAA,OAAO,eAAe,OAAA,CAAQ,MAAA,GAAwB,EAAC,EAAG,UAAkB,IAAA,GAAA,CAAA,aAAoC;AAC5G,IAAA,MAAM,EAAE,QAAA,GAAW,EAAA,gBAAsB,MAAA,GAAS,cAAgB,GAAI,MAAA;AACtE,IAAA,IAAI,YAAA;AAEJ,IAAA,IAAI,WAAW,CAAA,eAAmB;AAC9B,MAAA,YAAA,GAAe,EAAA;AAAA,IACnB,CAAA,MAAA,IAAW,aAAa,EAAA,gBAAsB;AAC1C,MAAA,YAAA,GAAe,EAAA;AAAA,IACnB,CAAA,MAAA,IAAW,aAAa,UAAA,kBAAwB;AAC5C,MAAA,MAAM,GAAA,uBAAU,IAAA,EAAK;AACrB,MAAA,MAAM,OAAA,GAAU,IAAI,IAAA,CAAK,GAAG,CAAA;AAC5B,MAAA,OAAA,CAAQ,QAAA,CAAS,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,CAAC,CAAA;AAE3B,MAAA,IAAI,GAAA,CAAI,QAAA,EAAS,IAAK,CAAA,EAAG;AACrB,QAAA,OAAA,CAAQ,OAAA,CAAQ,OAAA,CAAQ,OAAA,EAAQ,GAAI,CAAC,CAAA;AAAA,MACzC;AAEA,MAAA,YAAA,GAAe,IAAA,CAAK,OAAO,OAAA,CAAQ,OAAA,KAAY,GAAA,CAAI,OAAA,MAAa,GAAI,CAAA;AAAA,IACxE,CAAA,MAAO;AACH,MAAA,YAAA,GAAe,QAAA;AAAA,IACnB;AAEA,IAAA,MAAM,aAAA,GAAgB;AAAA,MAClB,IAAA,EAAM,QAAA;AAAA,MACN,QAAA,EAAU,YAAA;AAAA,MACV,MAAA;AAAA,MACA,WAAW,IAAA,CAAK,KAAA,CAAM,IAAA,CAAK,GAAA,KAAQ,GAAI,CAAA;AAAA,MACvC,QAAA,EAAU,wBAA2B,CAAA,GAAI,CAAA;AAAA,MACzC,MAAM,GAAA,CAAI;AAAA,KACd;AAEA,IAAA,MAAM,kBAAkB,KAAA,CAAM,SAAA,CAAU,IAAA,CAAK,SAAA,CAAU,aAAa,CAAC,CAAA;AACrE,IAAA,IAAI,CAAC,eAAA,EAAiB,MAAM,IAAI,aAAa,0BAA0B,CAAA;AAEvE,IAAA,MAAM,QAAA,GAAW,MAAM,KAAA,CAAM,OAAA,CAAQ,UAAA,EAAY;AAAA,MAC7C,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,IAAI,eAAA,CAAgB;AAAA,QACtB,MAAA,EAAQ;AAAA,OACX;AAAA,KACJ,CAAA;AAED,IAAA,OAAO,KAAA,CAAM,QAAQ,QAAQ,CAAA;AAAA,EACjC,CAAA;AACJ,CAAC,CAAA;AC1EM,IAAM,gCAAgC,UAAA,EAA2C,CAAE,CAAC,GAAA,EAAK,GAAG,KAAA,KAAU;AACzG,EAAA,MAAM,UAAA,GAAa,MAAM,OAAA,CAAQ,CAAA,EAAG,IAAI,aAAA,CAAc,YAAA,CAAa,CAAC,CAAC,CAAA,wBAAA,CAA0B,CAAA;AAY/F,EAAA,OAAO,eAAe,sBAAA,CAClB,MAAA,EACA,QAAA,EACA,IAAA,GAAA,CAAA,aACF;AACE,IAAA,MAAM,SAAA,GAAYZ,YAAU,QAAQ,CAAA;AAEpC,IAAA,MAAM,MAAA,GAAS;AAAA,MACX,UAAA,EAAY,SAAS,CAAA,GAAI,CAAA;AAAA,MACzB,eAAe,IAAA,IAAA,CAAA,eAA2B,SAAA,CAAU,GAAA,CAAI,CAAC,OAAO,CAAA,CAAA,EAAI,EAAE,CAAA,CAAE,CAAA,GAAI,UAAU,GAAA,CAAI,CAAC,EAAA,KAAO,CAAA,CAAA,EAAI,EAAE,CAAA,CAAE;AAAA,KAC9G;AAEA,IAAA,MAAM,kBAAkB,KAAA,CAAM,SAAA,CAAU,IAAA,CAAK,SAAA,CAAU,MAAM,CAAC,CAAA;AAC9D,IAAA,IAAI,CAAC,eAAA,EAAiB,MAAM,IAAI,aAAa,0BAA0B,CAAA;AAEvE,IAAA,MAAM,QAAA,GAAW,MAAM,KAAA,CAAM,OAAA,CAAQ,UAAA,EAAY;AAAA,MAC7C,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,IAAI,eAAA,CAAgB;AAAA,QACtB,MAAA,EAAQ;AAAA,OACX;AAAA,KACJ,CAAA;AAED,IAAA,OAAO,KAAA,CAAM,QAAQ,QAAQ,CAAA;AAAA,EACjC,CAAA;AACJ,CAAC,CAAA;;;ACvCM,IAAM,mBAAmB,UAAA,EAA8B,CAAE,CAAC,GAAA,EAAK,KAAK,KAAA,KAAU;AACjF,EAAA,MAAM,UAAA,GAAa,MAAM,OAAA,CAAQ,CAAA,EAAG,IAAI,aAAA,CAAc,KAAA,CAAM,CAAC,CAAC,CAAA,eAAA,CAAiB,CAAA;AAS/E,EAAA,OAAO,eAAe,UAAU,MAAA,EAAgB;AAC5C,IAAA,MAAM,MAAA,GAAS;AAAA,MACX,OAAA,EAAS,MAAA;AAAA,MACT,MAAM,GAAA,CAAI;AAAA,KACd;AAEA,IAAA,MAAM,kBAAkB,KAAA,CAAM,SAAA,CAAU,IAAA,CAAK,SAAA,CAAU,MAAM,CAAC,CAAA;AAC9D,IAAA,IAAI,CAAC,eAAA,EAAiB,MAAM,IAAI,aAAa,0BAA0B,CAAA;AAEvE,IAAA,MAAM,QAAA,GAAW,MAAM,KAAA,CAAM,OAAA,CAAQ,UAAA,EAAY;AAAA,MAC7C,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,IAAI,eAAA,CAAgB;AAAA,QACtB,MAAA,EAAQ;AAAA,OACX;AAAA,KACJ,CAAA;AAED,IAAA,OAAO,KAAA,CAAM,QAAQ,QAAQ,CAAA;AAAA,EACjC,CAAA;AACJ,CAAC,CAAA;;;AC5BM,IAAM,qBAAqB,UAAA,EAAgC,CAAE,CAAC,GAAA,EAAK,KAAK,KAAA,KAAU;AACrF,EAAA,MAAM,UAAA,GAAa,MAAM,OAAA,CAAQ,CAAA,EAAG,IAAI,aAAA,CAAc,MAAA,CAAO,CAAC,CAAC,CAAA,mBAAA,CAAqB,CAAA;AASpF,EAAA,OAAO,eAAe,YAAY,MAAA,EAAgB;AAC9C,IAAA,MAAM,MAAA,GAAS;AAAA,MACX,GAAA,EAAK,MAAA;AAAA,MACL,MAAM,GAAA,CAAI;AAAA,KACd;AAEA,IAAA,MAAM,kBAAkB,KAAA,CAAM,SAAA,CAAU,IAAA,CAAK,SAAA,CAAU,MAAM,CAAC,CAAA;AAC9D,IAAA,IAAI,CAAC,eAAA,EAAiB,MAAM,IAAI,aAAa,0BAA0B,CAAA;AAEvE,IAAA,MAAM,QAAA,GAAW,MAAM,KAAA,CAAM,OAAA,CAAQ,UAAA,EAAY;AAAA,MAC7C,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,IAAI,eAAA,CAAgB;AAAA,QACtB,MAAA,EAAQ;AAAA,OACX;AAAA,KACJ,CAAA;AAED,IAAA,OAAO,KAAA,CAAM,QAAQ,QAAQ,CAAA;AAAA,EACjC,CAAA;AACJ,CAAC,CAAA;;;ACpBM,IAAM,cAAc,UAAA,EAAyB,CAAE,CAAC,GAAA,EAAK,KAAK,KAAA,KAAU;AACvE,EAAA,MAAM,OAAA,GAAU;AAAA,IACZ,CAAA,CAAA,cAAmB,KAAA,CAAM,OAAA,CAAQ,CAAA,EAAG,IAAI,aAAA,CAAc,IAAA,CAAK,CAAC,CAAC,CAAA,iBAAA,CAAmB,CAAA;AAAA,IAChF,CAAA,CAAA,eAAoB,KAAA,CAAM,OAAA,CAAQ,CAAA,EAAG,IAAI,aAAA,CAAc,KAAA,CAAM,CAAC,CAAC,CAAA,kBAAA,CAAoB;AAAA,GACvF;AAUA,EAAA,OAAO,eAAe,IAAA,CAAK,OAAA,EAAsB,QAAA,EAAkB,IAAA,GAAA,CAAA,aAAoC;AACnG,IAAA,MAAM,MAAA,GAAkC;AAAA,MACpC,OAAO,OAAA,CAAQ,KAAA;AAAA,MACf,QAAA,EAAU,KAAK,GAAA,EAAI;AAAA,MACnB,cAAc,OAAA,CAAQ;AAAA,KAC1B;AAEA,IAAA,IAAI,IAAA,IAAA,CAAA,cAA0B;AAC1B,MAAA,MAAA,CAAO,MAAM,CAAA,GAAI,QAAA;AACjB,MAAA,MAAA,CAAO,YAAY,CAAA,GAAI,CAAA;AACvB,MAAA,MAAA,CAAO,MAAM,IAAI,GAAA,CAAI,IAAA;AAAA,IACzB,CAAA,MAAO,MAAA,CAAO,MAAM,CAAA,GAAI,QAAA;AAExB,IAAA,MAAM,kBAAkB,KAAA,CAAM,SAAA,CAAU,IAAA,CAAK,SAAA,CAAU,MAAM,CAAC,CAAA;AAC9D,IAAA,IAAI,CAAC,eAAA,EAAiB,MAAM,IAAI,aAAa,2BAA2B,CAAA;AAExE,IAAA,MAAM,WAAW,MAAM,KAAA,CAAM,OAAA,CAAQ,OAAA,CAAQ,IAAI,CAAA,EAAG;AAAA,MAChD,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,IAAI,eAAA,CAAgB;AAAA,QACtB,MAAA,EAAQ;AAAA,OACX;AAAA,KACJ,CAAA;AAED,IAAA,OAAO,KAAA,CAAM,QAAQ,QAAQ,CAAA;AAAA,EACjC,CAAA;AACJ,CAAC,CAAA;;;AC/CM,IAAM,2BAA2B,UAAA,EAAsC,CAAE,CAAC,GAAA,EAAK,MAAM,KAAA,KAAU;AAClG,EAAA,MAAM,UAAA,GAAa,MAAM,OAAA,CAAQ,CAAA,EAAG,IAAI,aAAA,CAAc,MAAA,CAAO,CAAC,CAAC,CAAA,gBAAA,CAAkB,CAAA;AASjF,EAAA,OAAO,eAAe,kBAAkB,QAAA,EAAkB;AACtD,IAAA,MAAM,MAAA,GAAS;AAAA,MACX,GAAA,EAAK;AAAA,KACT;AAEA,IAAA,MAAM,kBAAkB,KAAA,CAAM,SAAA,CAAU,IAAA,CAAK,SAAA,CAAU,MAAM,CAAC,CAAA;AAC9D,IAAA,IAAI,CAAC,eAAA,EAAiB,MAAM,IAAI,aAAa,0BAA0B,CAAA;AAEvE,IAAA,MAAM,QAAA,GAAW,MAAM,KAAA,CAAM,OAAA,CAAQ,UAAA,EAAY;AAAA,MAC7C,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,IAAI,eAAA,CAAgB;AAAA,QACtB,MAAA,EAAQ;AAAA,OACX;AAAA,KACJ,CAAA;AAED,IAAA,OAAO,KAAA,CAAM,QAAQ,QAAQ,CAAA;AAAA,EACjC,CAAA;AACJ,CAAC,CAAA;;;ACzBM,IAAM,4BAA4B,UAAA,EAAuC,CAAE,CAAC,GAAA,EAAK,KAAK,KAAA,KAAU;AACnG,EAAA,MAAM,OAAA,GAAU,MAAM,OAAA,CAAQ,CAAA,EAAG,IAAI,aAAA,CAAc,OAAA,CAAQ,CAAC,CAAC,CAAA,wBAAA,CAA0B,CAAA;AACvF,EAAA,MAAM,WAAA,GAAc,MAAM,OAAA,CAAQ,CAAA,EAAG,IAAI,aAAA,CAAc,OAAA,CAAQ,CAAC,CAAC,CAAA,4BAAA,CAA8B,CAAA;AAS/F,EAAA,OAAO,eAAe,mBAAmB,MAAA,EAAiB;AACtD,IAAA,MAAM,MAAA,GAAS;AAAA,MACX,MAAA,EAAQ,SAAS,CAAA,GAAI,CAAA;AAAA,MACrB,MAAM,GAAA,CAAI;AAAA,KACd;AAEA,IAAA,MAAM,kBAAkB,KAAA,CAAM,SAAA,CAAU,IAAA,CAAK,SAAA,CAAU,MAAM,CAAC,CAAA;AAC9D,IAAA,IAAI,CAAC,eAAA,EAAiB,MAAM,IAAI,aAAa,0BAA0B,CAAA;AAEvE,IAAA,MAAM,SAAA,GAAY,SAAS,OAAA,GAAU,WAAA;AACrC,IAAA,MAAM,QAAA,GAAW,MAAM,KAAA,CAAM,OAAA,CAAQ,KAAA,CAAM,OAAA,CAAQ,SAAA,EAAW,EAAE,MAAA,EAAQ,eAAA,EAAiB,CAAA,EAAG;AAAA,MACxF,MAAA,EAAQ;AAAA,KACX,CAAA;AAED,IAAA,OAAO,KAAA,CAAM,QAAQ,QAAQ,CAAA;AAAA,EACjC,CAAA;AACJ,CAAC,CAAA;;;AC9BM,IAAK,OAAA,qBAAAa,QAAAA,KAAL;AACH,EAAAA,QAAAA,CAAAA,QAAAA,CAAA,eAAY,CAAA,CAAA,GAAZ,WAAA;AACA,EAAAA,QAAAA,CAAAA,QAAAA,CAAA,aAAU,KAAA,CAAA,GAAV,SAAA;AACA,EAAAA,QAAAA,CAAAA,QAAAA,CAAA,gBAAa,MAAA,CAAA,GAAb,YAAA;AACA,EAAAA,QAAAA,CAAAA,QAAAA,CAAA,mBAAgB,OAAA,CAAA,GAAhB,eAAA;AAJQ,EAAA,OAAAA,QAAAA;AAAA,CAAA,EAAA,OAAA,IAAA,EAAA;AASL,IAAM,8BAA8B,UAAA,EAAyC,CAAE,CAAC,GAAA,EAAK,KAAK,KAAA,KAAU;AACvG,EAAA,MAAM,UAAA,GAAa,MAAM,OAAA,CAAQ,CAAA,EAAG,IAAI,aAAA,CAAc,YAAA,CAAa,CAAC,CAAC,CAAA,kCAAA,CAAoC,CAAA;AAWzG,EAAA,OAAO,eAAe,oBAAA,CAAqB,GAAA,EAAc,QAAA,EAAkB,IAAA,GAAA,CAAA,aAAoC;AAC3G,IAAA,MAAM,MAAA,GAAS;AAAA,MACX,QAAA;AAAA,MACA,OAAA,EAAS,yBAA4B,CAAA,GAAI,CAAA;AAAA,MACzC,GAAA;AAAA,MACA,YAAY,GAAA,CAAI;AAAA,KACpB;AAEA,IAAA,MAAM,kBAAkB,KAAA,CAAM,SAAA,CAAU,IAAA,CAAK,SAAA,CAAU,MAAM,CAAC,CAAA;AAC9D,IAAA,IAAI,CAAC,eAAA,EAAiB,MAAM,IAAI,aAAa,0BAA0B,CAAA;AAEvE,IAAA,MAAM,QAAA,GAAW,MAAM,KAAA,CAAM,OAAA,CAAQ,UAAA,EAAY;AAAA,MAC7C,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,IAAI,eAAA,CAAgB;AAAA,QACtB,MAAA,EAAQ;AAAA,OACX;AAAA,KACJ,CAAA;AAED,IAAA,OAAO,KAAA,CAAM,QAAQ,QAAQ,CAAA;AAAA,EACjC,CAAA;AACJ,CAAC,CAAA;ACvBM,IAAM,yBAAyB,UAAA,EAAoC,CAAE,CAAC,GAAA,EAAK,KAAK,KAAA,KAAU;AAC7F,EAAA,MAAM,UAAA,GAAa,MAAM,OAAA,CAAQ,CAAA,EAAG,IAAI,aAAA,CAAc,UAAA,CAAW,CAAC,CAAC,CAAA,qBAAA,CAAuB,CAAA;AAU1F,EAAA,OAAO,eAAe,gBAAgB,OAAA,EAAiC;AACnE,IAAA,MAAM,IAAA,GAAOb,WAAAA,CAAU,OAAA,CAAQ,IAAA,IAAQ,EAAE,CAAA;AACzC,IAAA,MAAM,UAAA,GAAa,QAAQ,KAAA,KAAU,CAAA,IAAK,QAAQ,KAAA,KAAU,CAAA,GAAI,OAAO,EAAC;AAExE,IAAA,MAAM,MAAA,GAAS;AAAA,MACX,SAAS,GAAA,CAAI,QAAA;AAAA,MACb,IAAI,OAAA,CAAQ,EAAA;AAAA,MACZ,QAAQ,OAAA,CAAQ,QAAA;AAAA,MAChB,SAAS,OAAA,CAAQ,OAAA;AAAA,MACjB,WAAW,OAAA,CAAQ,SAAA;AAAA,MACnB,SAAS,OAAA,CAAQ,OAAA;AAAA,MACjB,UAAA,EAAY,CAAC,mBAAmB,CAAA;AAAA,MAChC,OAAO,OAAA,CAAQ,KAAA;AAAA,MACf,IAAA,EAAM;AAAA,KACV;AAEA,IAAA,MAAM,kBAAkB,KAAA,CAAM,SAAA,CAAU,IAAA,CAAK,SAAA,CAAU,MAAM,CAAC,CAAA;AAC9D,IAAA,IAAI,CAAC,eAAA,EAAiB,MAAM,IAAI,aAAa,0BAA0B,CAAA;AAEvE,IAAA,MAAM,QAAA,GAAW,MAAM,KAAA,CAAM,OAAA,CAAQ,UAAA,EAAY;AAAA,MAC7C,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,IAAI,eAAA,CAAgB;AAAA,QACtB,MAAA,EAAQ;AAAA,OACX;AAAA,KACJ,CAAA;AAED,IAAA,OAAO,KAAA,CAAM,QAAQ,QAAQ,CAAA;AAAA,EACjC,CAAA;AACJ,CAAC,CAAA;;;AC7CM,IAAM,uBAAuB,UAAA,EAAkC,CAAE,CAAC,GAAA,EAAK,GAAG,KAAA,KAAU;AACvF,EAAA,MAAM,UAAA,GAAa,MAAM,OAAA,CAAQ,CAAA,EAAG,IAAI,aAAA,CAAc,OAAA,CAAQ,CAAC,CAAC,CAAA,+BAAA,CAAiC,CAAA;AAUjG,EAAA,OAAO,eAAe,cAAc,OAAA,EAA+B;AAC/D,IAAA,MAAM,MAAA,GAAS;AAAA,MACX,YAAY,OAAA,CAAQ,SAAA;AAAA,MACpB,cAAc,OAAA,CAAQ,WAAA;AAAA,MACtB,aAAA,EAAe;AAAA;AAAA,KACnB;AAEA,IAAA,MAAM,kBAAkB,KAAA,CAAM,SAAA,CAAU,IAAA,CAAK,SAAA,CAAU,MAAM,CAAC,CAAA;AAC9D,IAAA,IAAI,CAAC,eAAA,EAAiB,MAAM,IAAI,aAAa,0BAA0B,CAAA;AAEvE,IAAA,MAAM,QAAA,GAAW,MAAM,KAAA,CAAM,OAAA,CAAQ,UAAA,EAAY;AAAA,MAC7C,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,IAAI,eAAA,CAAgB;AAAA,QACtB,MAAA,EAAQ;AAAA,OACX;AAAA,KACJ,CAAA;AAED,IAAA,OAAO,KAAA,CAAM,QAAQ,QAAQ,CAAA;AAAA,EACjC,CAAA;AACJ,CAAC,CAAA;;;ACGM,IAAM,6BAA6B,UAAA,EAAwC,CAAE,CAAC,GAAA,EAAK,KAAK,KAAA,KAAU;AACrG,EAAA,MAAM,UAAA,GAAa,MAAM,OAAA,CAAQ,CAAA,EAAG,IAAI,aAAA,CAAc,KAAA,CAAM,CAAC,CAAC,CAAA,yBAAA,CAA2B,CAAA;AAYzF,EAAA,OAAO,eAAe,mBAAA,CAAoB,OAAA,EAAqC,OAAA,EAAiB;AAC5F,IAAA,MAAM,MAAA,GAAS;AAAA,MACX,SAAA,EAAW,OAAA,CAAQ,SAAA,GAAY,CAAA,GAAI,CAAA;AAAA,MACnC,YAAA,EAAc,OAAA,CAAQ,YAAA,GAAe,CAAA,GAAI,CAAA;AAAA;AAAA,MAIzC,YAAA,EAAc,OAAA,CAAQ,YAAA,GAAe,CAAA,GAAI,CAAA;AAAA,MACzC,gBAAA,EAAkB,OAAA,CAAQ,gBAAA,GAAmB,CAAA,GAAI,CAAA;AAAA,MACjD,QAAA,EAAU,OAAA,CAAQ,QAAA,GAAW,CAAA,GAAI,CAAA;AAAA,MACjC,cAAA,EAAgB,OAAA,CAAQ,cAAA,GAAiB,CAAA,GAAI,CAAA;AAAA,MAC7C,cAAA,EAAgB,OAAA,CAAQ,cAAA,GAAiB,CAAA,GAAI,CAAA;AAAA,MAC7C,WAAA,EAAa,OAAA,CAAQ,WAAA,GAAc,CAAA,GAAI,CAAA;AAAA,MACvC,cAAA,EAAgB,OAAA,CAAQ,cAAA,GAAiB,CAAA,GAAI,CAAA;AAAA;AAAA,MAG7C,WAAA,EAAa,CAAA;AAAA,MACb,UAAA,EAAY,CAAA;AAAA,MACZ,WAAA,EAAa,CAAA;AAAA,MACb,iBAAiB,EAAC;AAAA,MAElB,IAAA,EAAM,OAAA;AAAA,MACN,MAAM,GAAA,CAAI;AAAA,KACd;AAEA,IAAA,MAAM,kBAAkB,KAAA,CAAM,SAAA,CAAU,IAAA,CAAK,SAAA,CAAU,MAAM,CAAC,CAAA;AAC9D,IAAA,IAAI,CAAC,eAAA,EAAiB,MAAM,IAAI,aAAa,0BAA0B,CAAA;AAEvE,IAAA,MAAM,QAAA,GAAW,MAAM,KAAA,CAAM,OAAA,CAAQ,KAAA,CAAM,OAAA,CAAQ,UAAA,EAAY,EAAE,MAAA,EAAQ,eAAA,EAAiB,CAAA,EAAG;AAAA,MACzF,MAAA,EAAQ;AAAA,KACX,CAAA;AAED,IAAA,OAAO,KAAA,CAAM,QAAQ,QAAQ,CAAA;AAAA,EACjC,CAAA;AACJ,CAAC,CAAA;;;AC3FM,IAAM,gCAAgC,UAAA,EAA2C,CAAE,CAAC,GAAA,EAAK,KAAK,KAAA,KAAU;AAC3G,EAAA,MAAM,UAAA,GAAa,MAAM,OAAA,CAAQ,CAAA,EAAG,IAAI,aAAA,CAAc,YAAA,CAAa,CAAC,CAAC,CAAA,6BAAA,CAA+B,CAAA;AACpG,EAAA,MAAM,QAAA,GAAW,SAAA;AASjB,EAAA,OAAO,eAAe,uBAAuB,GAAA,EAAa;AACtD,IAAA,IAAI,CAAC,QAAA,CAAS,IAAA,CAAK,GAAG,CAAA,EAAG;AACrB,MAAA,MAAM,IAAI,aAAa,gDAAgD,CAAA;AAAA,IAC3E;AAEA,IAAA,MAAM,YAAA,GAAe,WAAW,GAAG,CAAA;AACnC,IAAA,MAAM,MAAA,GAAS;AAAA,MACX,OAAA,EAAS,YAAA;AAAA,MACT,MAAM,GAAA,CAAI;AAAA,KACd;AAEA,IAAA,MAAM,kBAAkB,KAAA,CAAM,SAAA,CAAU,IAAA,CAAK,SAAA,CAAU,MAAM,CAAC,CAAA;AAC9D,IAAA,IAAI,CAAC,eAAA,EAAiB,MAAM,IAAI,aAAa,0BAA0B,CAAA;AAEvE,IAAA,MAAM,QAAA,GAAW,MAAM,KAAA,CAAM,OAAA,CAAQ,KAAA,CAAM,OAAA,CAAQ,UAAA,EAAY,EAAE,MAAA,EAAQ,eAAA,EAAiB,CAAA,EAAG;AAAA,MACzF,MAAA,EAAQ;AAAA,KACX,CAAA;AAED,IAAA,OAAO,KAAA,CAAM,QAAQ,QAAQ,CAAA;AAAA,EACjC,CAAA;AACJ,CAAC,CAAA;;;ACpBM,IAAM,sBAAsB,UAAA,EAAiC,CAAE,CAAC,GAAA,EAAK,KAAK,KAAA,KAAU;AACvF,EAAA,MAAM,UAAA,GAAa,MAAM,OAAA,CAAQ,CAAA,EAAG,IAAI,aAAA,CAAc,KAAA,CAAM,CAAC,CAAC,CAAA,qBAAA,CAAuB,CAAA;AASrF,EAAA,OAAO,eAAe,aAAa,OAAA,EAA8B;AAC7D,IAAA,MAAM,MAAA,GAAS;AAAA,MACX,SAAA,EAAW,IAAA,CAAK,SAAA,CAAU,OAAA,CAAQ,SAAS,CAAA;AAAA,MAC3C,SAAS,OAAA,CAAQ,OAAA;AAAA,MACjB,MAAM,GAAA,CAAI;AAAA,KACd;AAEA,IAAA,MAAM,kBAAkB,KAAA,CAAM,SAAA,CAAU,IAAA,CAAK,SAAA,CAAU,MAAM,CAAC,CAAA;AAC9D,IAAA,IAAI,CAAC,eAAA,EAAiB,MAAM,IAAI,aAAa,2BAA2B,CAAA;AAExE,IAAA,MAAM,QAAA,GAAW,MAAM,KAAA,CAAM,OAAA,CAAQ,UAAA,EAAY;AAAA,MAC7C,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,IAAI,eAAA,CAAgB;AAAA,QACtB,MAAA,EAAQ;AAAA,OACX;AAAA,KACJ,CAAA;AAED,IAAA,MAAM,WAAA,GAAe,MAAM,KAAA,CAAM,OAAA,CAAQ,QAAQ,CAAA;AAIjD,IAAA,OAAO;AAAA,MACH,SAAA,EAAW,IAAA,CAAK,KAAA,CAAM,WAAA,CAAY,SAAS,CAAA;AAAA,MAC3C,SAAS,WAAA,CAAY,OAAA;AAAA,MACrB,gBAAgB,WAAA,CAAY;AAAA,KAChC;AAAA,EACJ,CAAA;AACJ,CAAC,CAAA;;;AClDM,IAAK,4BAAA,qBAAAc,6BAAAA,KAAL;AACH,EAAAA,8BAAA,IAAA,CAAA,GAAK,IAAA;AACL,EAAAA,8BAAA,IAAA,CAAA,GAAK,IAAA;AAFG,EAAA,OAAAA,6BAAAA;AAAA,CAAA,EAAA,4BAAA,IAAA,EAAA;AAOL,IAAM,oBAAoB,UAAA,EAA+B,CAAE,CAAC,GAAA,EAAK,GAAG,KAAA,KAAU;AACjF,EAAA,MAAM,UAAA,GAAa,MAAM,OAAA,CAAQ,CAAA,EAAG,IAAI,aAAA,CAAc,OAAA,CAAQ,CAAC,CAAC,CAAA,8BAAA,CAAgC,CAAA;AAUhG,EAAA,OAAO,eAAe,UAAA,CAAW,QAAA,GAAyC,IAAA,WAAiC;AACvG,IAAA,MAAM,MAAA,GAAS;AAAA,MACX;AAAA,KACJ;AAEA,IAAA,MAAM,kBAAkB,KAAA,CAAM,SAAA,CAAU,IAAA,CAAK,SAAA,CAAU,MAAM,CAAC,CAAA;AAC9D,IAAA,IAAI,CAAC,eAAA,EAAiB,MAAM,IAAI,aAAa,0BAA0B,CAAA;AAEvE,IAAA,MAAM,QAAA,GAAW,MAAM,KAAA,CAAM,OAAA,CAAQ,KAAA,CAAM,OAAA,CAAQ,UAAA,EAAY,EAAE,MAAA,EAAQ,eAAA,EAAiB,CAAA,EAAG;AAAA,MACzF,MAAA,EAAQ;AAAA,KACX,CAAA;AAED,IAAA,OAAO,KAAA,CAAM,QAAQ,QAAQ,CAAA;AAAA,EACjC,CAAA;AACJ,CAAC,CAAA;;;ACHM,IAAM,8BAA8B,UAAA,EAAyC,CAAE,CAAC,GAAA,EAAK,GAAG,KAAA,KAAU;AACrG,EAAA,MAAM,UAAA,GAAa,MAAM,OAAA,CAAQ,CAAA,EAAG,IAAI,aAAA,CAAc,OAAA,CAAQ,CAAC,CAAC,CAAA,+BAAA,CAAiC,CAAA;AAUjG,EAAA,OAAO,eAAe,qBAAqB,OAAA,EAAsC;AAC7E,IAAA,MAAM,YAAA,GAAe,OAAA,CAAQ,cAAA,IAAkB,EAAC;AAEhD,IAAA,IAAI,OAAA,CAAQ,KAAA,IAAS,OAAA,CAAQ,KAAA,CAAM,UAAU,CAAA,EAAG;AAC5C,MAAA,IAAI,OAAA,CAAQ,KAAA,CAAM,MAAA,GAAS,CAAA,EAAG;AAC1B,QAAA,MAAM,IAAI,aAAa,mCAAmC,CAAA;AAAA,MAC9D;AAEA,MAAA,KAAA,MAAW,SAAA,IAAa,QAAQ,KAAA,EAAO;AACnC,QAAA,MAAM,WAAA,GAAc,MAAM,GAAA,CAAI,kBAAA,CAAmB;AAAA,UAC7C,IAAA,EAAM;AAAA,SACT,CAAA;AAED,QAAA,MAAM,GAAA,GAAM,WAAA,CAAY,SAAA,IAAa,WAAA,CAAY,KAAA;AACjD,QAAA,YAAA,CAAa,KAAK,GAAG,CAAA;AAAA,MACzB;AAAA,IACJ;AAEA,IAAA,IAAI,YAAA,CAAa,SAAS,CAAA,EAAG;AACzB,MAAA,MAAM,IAAI,aAAa,mCAAmC,CAAA;AAAA,IAC9D;AAEA,IAAA,MAAM,MAAA,GAAS;AAAA,MACX,YAAY,OAAA,CAAQ,SAAA;AAAA,MACpB,cAAc,OAAA,CAAQ,WAAA;AAAA,MACtB,OAAO,OAAA,CAAQ,KAAA;AAAA,MACf,aAAa,OAAA,CAAQ,WAAA;AAAA,MACrB,cAAA,EAAgB,YAAA;AAAA,MAChB,YAAY,OAAA,CAAQ,SAAA;AAAA,MACpB,aAAA,EAAe,QAAA;AAAA,MACf,aAAa,OAAA,CAAQ;AAAA,KACzB;AAEA,IAAA,MAAM,kBAAkB,KAAA,CAAM,SAAA,CAAU,IAAA,CAAK,SAAA,CAAU,MAAM,CAAC,CAAA;AAC9D,IAAA,IAAI,CAAC,eAAA,EAAiB,MAAM,IAAI,aAAa,0BAA0B,CAAA;AAEvE,IAAA,MAAM,QAAA,GAAW,MAAM,KAAA,CAAM,OAAA,CAAQ,UAAA,EAAY;AAAA,MAC7C,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,IAAI,eAAA,CAAgB;AAAA,QACtB,MAAA,EAAQ;AAAA,OACX;AAAA,KACJ,CAAA;AAED,IAAA,OAAO,KAAA,CAAM,QAAQ,QAAQ,CAAA;AAAA,EACjC,CAAA;AACJ,CAAC,CAAA;;;AChEM,IAAM,uBAAuB,UAAA,EAAkC,CAAE,CAAC,GAAA,EAAK,KAAK,KAAA,KAAU;AACzF,EAAA,MAAM,UAAA,GAAa,MAAM,OAAA,CAAQ,CAAA,EAAG,IAAI,aAAA,CAAc,OAAA,CAAQ,CAAC,CAAC,CAAA,0BAAA,CAA4B,CAAA;AAY5F,EAAA,OAAO,eAAe,cAAc,OAAA,EAA+B;AArCvE,IAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA;AAsCQ,IAAA,MAAM,MAAA,GAAS;AAAA,MACX,OAAA,EAAS,KAAK,SAAA,CAAU;AAAA,QACpB,IAAA,EAAM,QAAQ,OAAA,CAAQ,IAAA;AAAA,QACtB,GAAA,EAAK,QAAQ,OAAA,CAAQ,GAAA;AAAA,QACrB,MAAA,EAAQ,QAAQ,OAAA,CAAQ;AAAA,OAC3B,CAAA;AAAA,MACD,GAAA,EAAK,KAAK,SAAA,CAAU;AAAA,QAChB,IAAA,EAAA,CAAM,EAAA,GAAA,OAAA,CAAQ,GAAA,KAAR,IAAA,GAAA,MAAA,GAAA,EAAA,CAAa,WAAA;AAAA,QACnB,IAAA,EAAA,CAAM,EAAA,GAAA,OAAA,CAAQ,GAAA,KAAR,IAAA,GAAA,MAAA,GAAA,EAAA,CAAa,IAAA;AAAA,QACnB,IAAA,EAAA,CAAM,EAAA,GAAA,OAAA,CAAQ,GAAA,KAAR,IAAA,GAAA,MAAA,GAAA,EAAA,CAAa,OAAA;AAAA,QACnB,OAAA,EAAA,CAAS,EAAA,GAAA,OAAA,CAAQ,GAAA,KAAR,IAAA,GAAA,MAAA,GAAA,EAAA,CAAa,OAAA;AAAA,QACtB,KAAA,EAAA,CAAO,EAAA,GAAA,OAAA,CAAQ,GAAA,KAAR,IAAA,GAAA,MAAA,GAAA,EAAA,CAAa;AAAA,OACvB,CAAA;AAAA,MACD,UAAU,GAAA,CAAI;AAAA,KAClB;AAEA,IAAA,MAAM,kBAAkB,KAAA,CAAM,SAAA,CAAU,IAAA,CAAK,SAAA,CAAU,MAAM,CAAC,CAAA;AAC9D,IAAA,IAAI,CAAC,eAAA,EAAiB,MAAM,IAAI,aAAa,0BAA0B,CAAA;AAEvE,IAAA,MAAM,QAAA,GAAW,MAAM,KAAA,CAAM,OAAA,CAAQ,UAAA,EAAY;AAAA,MAC7C,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,IAAI,eAAA,CAAgB;AAAA,QACtB,MAAA,EAAQ;AAAA,OACX;AAAA,KACJ,CAAA;AAED,IAAA,OAAO,KAAA,CAAM,QAAQ,QAAQ,CAAA;AAAA,EACjC,CAAA;AACJ,CAAC,CAAA;;;ACnDM,IAAM,4BAA4B,UAAA,EAAuC,CAAE,CAAC,GAAA,EAAK,MAAM,KAAA,KAAU;AACpG,EAAA,MAAM,UAAA,GAAa,MAAM,OAAA,CAAQ,CAAA,EAAG,IAAI,aAAA,CAAc,aAAA,CAAc,CAAC,CAAC,CAAA,wBAAA,CAA0B,CAAA;AAYhG,EAAA,OAAO,eAAe,kBAAA,CAAmB,aAAA,EAA0C,MAAA,EAAgB;AAC/F,IAAA,MAAM,MAAA,GAAS,CAAC,aAAA,CAAc,KAAA,GAAQ,CAAA,GAAI,CAAA;AAE1C,IAAA,MAAM,MAAA,GAAkC;AAAA,MACpC,MAAA;AAAA,MACA,SAAS,aAAA,CAAc,OAAA;AAAA,MACvB,OAAA,EAAS;AAAA,QACL,OAAO,aAAA,CAAc,KAAA;AAAA,QACrB,MAAA,EAAQ;AAAA,OACZ;AAAA,MACA,IAAA,EAAM;AAAA,KACV;AAEA,IAAA,IAAI,WAAW,CAAA,EAAG;AACd,MAAA,IAAI,CAAC,aAAA,CAAc,KAAA,EAAO,MAAM,IAAI,aAAa,mBAAmB,CAAA;AACpE,MAAA,MAAM,WAAA,GAAc,MAAM,GAAA,CAAI,kBAAA,CAAmB;AAAA,QAC7C,MAAM,aAAA,CAAc;AAAA,OACvB,CAAA;AAED,MAAA,MAAM,UAAU,WAAA,CAAY,OAAA;AAC5B,MAAA,MAAM,WAAW,WAAA,CAAY,QAAA;AAC7B,MAAA,MAAM,YAAY,WAAA,CAAY,SAAA;AAC9B,MAAA,MAAM,QAAQ,WAAA,CAAY,KAAA;AAE1B,MAAA,MAAA,CAAO,KAAA,GAAQ;AAAA,QACX,KAAA,EAAO;AAAA,UACH;AAAA,YACI,IAAA,EAAM,CAAA;AAAA,YACN,OAAA;AAAA,YACA,KAAA,EAAO,EAAA;AAAA,YACP,KAAA,EAAO,EAAA;AAAA,YACP,MAAA,EAAQ,EAAA;AAAA,YACR,YAAA,EAAc,QAAA;AAAA,YACd,QAAQ,SAAA,IAAa,KAAA;AAAA,YACrB,QAAA;AAAA,YACA,WAAW,SAAA,IAAa,KAAA;AAAA,YACxB,OAAO,KAAA,IAAS;AAAA;AACpB;AACJ,OACJ;AAAA,IACJ;AAEA,IAAA,MAAM,kBAAkB,KAAA,CAAM,SAAA,CAAU,IAAA,CAAK,SAAA,CAAU,MAAM,CAAC,CAAA;AAC9D,IAAA,IAAI,CAAC,eAAA,EAAiB,MAAM,IAAI,aAAa,0BAA0B,CAAA;AAEvE,IAAA,MAAM,QAAA,GAAW,MAAM,KAAA,CAAM,OAAA,CAAQ,KAAA,CAAM,OAAA,CAAQ,UAAA,EAAY,EAAE,MAAA,EAAQ,eAAA,EAAiB,CAAA,EAAG;AAAA,MACzF,MAAA,EAAQ;AAAA,KACX,CAAA;AAED,IAAA,OAAO,KAAA,CAAM,QAAQ,QAAQ,CAAA;AAAA,EACjC,CAAA;AACJ,CAAC,CAAA;;;AC1EM,IAAK,kBAAA,qBAAAC,mBAAAA,KAAL;AACH,EAAAA,oBAAA,cAAA,CAAA,GAAe,eAAA;AACf,EAAAA,oBAAA,kBAAA,CAAA,GAAmB,oBAAA;AACnB,EAAAA,oBAAA,mBAAA,CAAA,GAAoB,qBAAA;AACpB,EAAAA,oBAAA,gBAAA,CAAA,GAAiB,iBAAA;AACjB,EAAAA,oBAAA,YAAA,CAAA,GAAa,sBAAA;AACb,EAAAA,oBAAA,mBAAA,CAAA,GAAoB,sBAAA;AACpB,EAAAA,oBAAA,gBAAA,CAAA,GAAiB,mBAAA;AACjB,EAAAA,oBAAA,mBAAA,CAAA,GAAoB,sBAAA;AACpB,EAAAA,oBAAA,qBAAA,CAAA,GAAsB,wBAAA;AACtB,EAAAA,oBAAA,0BAAA,CAAA,GAA2B,6BAAA;AAC3B,EAAAA,oBAAA,cAAA,CAAA,GAAe,oBAAA;AACf,EAAAA,oBAAA,cAAA,CAAA,GAAe,oBAAA;AAZP,EAAA,OAAAA,mBAAAA;AAAA,CAAA,EAAA,kBAAA,IAAA,EAAA;AAeL,IAAM,wBAAwB,UAAA,EAAmC,CAAE,CAAC,IAAA,EAAM,MAAM,KAAA,KAAU;AAC7F,EAAA,MAAM,UAAA,GAAa,KAAA,CAAM,OAAA,CAAQ,CAAA,2CAAA,CAA6C,CAAA;AA4D9E,EAAA,OAAO,eAAe,cAAA,CAAe,IAAA,EAA0B,KAAA,EAAe;AAC1E,IAAA,MAAM,MAAA,GAAS;AAAA,MACX,CAAC,IAAI,GAAG;AAAA,KACZ;AAEA,IAAA,MAAM,kBAAkB,KAAA,CAAM,SAAA,CAAU,IAAA,CAAK,SAAA,CAAU,MAAM,CAAC,CAAA;AAC9D,IAAA,IAAI,CAAC,eAAA,EAAiB,MAAM,IAAI,aAAa,0BAA0B,CAAA;AAEvE,IAAA,MAAM,QAAA,GAAW,MAAM,KAAA,CAAM,OAAA,CAAQ,KAAA,CAAM,OAAA,CAAQ,UAAA,EAAY,EAAE,MAAA,EAAQ,eAAA,EAAiB,CAAA,EAAG;AAAA,MACzF,MAAA,EAAQ;AAAA,KACX,CAAA;AAED,IAAA,OAAO,KAAA,CAAM,QAAQ,QAAQ,CAAA;AAAA,EACjC,CAAA;AACJ,CAAC,CAAA;ACgCD,IAAM,OAAA,GAAU;AAAA,EACZ,KAAA,EAAO,uBAAA;AAAA,EACP,KAAA,EAAO,kBAAA;AAAA,EACP,MAAA,EAAQ;AACZ,CAAA;AAEO,IAAM,0BAA0B,UAAA,EAAW,CAAE,CAAC,GAAA,EAAK,KAAK,KAAA,KAAU;AACrE,EAAA,MAAM,aAAa,CAAA,EAAG,GAAA,CAAI,aAAA,CAAc,IAAA,CAAK,CAAC,CAAC,CAAA,IAAA,CAAA;AAC/C,EAAA,MAAM,EAAE,SAAA,EAAU,GAAI,GAAA,CAAI,QAAA,CAAU,QAAA;AAEpC,EAAA,SAAS,gBAAgB,SAAA,EAAmB;AACxC,IAAA,OAAO,YAAY,SAAA,CAAU,QAAA;AAAA,EACjC;AAEA,EAAA,SAAS,oBAAoB,QAAA,EAAkB;AAC3C,IAAA,OAAO,QAAA,GAAW,SAAA,CAAU,sBAAA,GAAyB,IAAA,GAAO,IAAA;AAAA,EAChE;AAEA,EAAA,SAAS,iBAAiB,GAAA,EAAa;AACnC,IAAA,OAAO,SAAA,CAAU,mBAAA,CAAoB,OAAA,CAAQ,GAAG,CAAA,IAAK,EAAA;AAAA,EACzD;AAWA,EAAA,OAAO,eAAe,gBAAA,CAClB,OAAA,EACA,QAAA,EACA,IAAA,GAAA,CAAA,aAC+B;AAC/B,IAAA,IAAI,CAAC,OAAA,EAAS,MAAM,IAAI,aAAa,iBAAiB,CAAA;AACtD,IAAA,MAAM,YAAA,GAAef,YAAU,OAAO,CAAA;AACtC,IAAA,IAAI,aAAa,MAAA,IAAU,CAAA,EAAG,MAAM,IAAI,aAAa,iBAAiB,CAAA;AACtE,IAAA,IAAI,eAAA,CAAgB,aAAa,MAAM,CAAA,QAAS,IAAI,YAAA,CAAa,yBAAA,GAA4B,SAAA,CAAU,QAAQ,CAAA;AAC/G,IAAA,IAAI,CAAC,QAAA,EAAU,MAAM,IAAI,aAAa,kBAAkB,CAAA;AAExD,IAAA,MAAM,SAAA,GAAY,GAAA,CAAI,QAAA,CAAU,QAAA,CAAS,SAAA,CAAU,eAAA;AACnD,IAAA,MAAM,cAAA,GAAiB,IAAA,IAAA,CAAA;AACvB,IAAA,MAAM,kBAAoC,EAAC;AAC3C,IAAA,MAAM,MAAM,CAAA,EAAG,UAAU,CAAA,CAAA,EAAI,cAAA,GAAiB,UAAU,SAAS,CAAA,CAAA,CAAA;AACjE,IAAA,MAAM,SAAA,GAAY,iBAAiB,IAAA,GAAO,GAAA;AAE1C,IAAA,IAAI,QAAA,GAAW,KAAK,GAAA,EAAI;AACxB,IAAA,KAAA,MAAW,UAAU,YAAA,EAAc;AAC/B,MAAA,MAAM,UAAA,GAAa,OAAO,MAAA,IAAU,QAAA;AACpC,MAAA,MAAM,QAAA,GAAW,OAAO,MAAA,IAAU,QAAA,IAAY,OAAO,IAAA,YAAgB,MAAA;AAErE,MAAA,IAAI,CAAC,UAAA,IAAc,CAAC,UAAU,MAAM,IAAI,aAAa,qBAAqB,CAAA;AAC1E,MAAA,IAAI,CAAC,cAAc,CAAC,MAAA,CAAO,UAAU,MAAM,IAAI,aAAa,kBAAkB,CAAA;AAE9E,MAAA,IAAI,UAAA,IAAc,CAACC,EAAAA,CAAG,UAAA,CAAW,MAAM,CAAA,EAAG,MAAM,IAAI,YAAA,CAAa,gBAAgB,CAAA;AAEjF,MAAA,MAAM,UAAU,gBAAA,CAAiB,UAAA,GAAa,SAAS,MAAA,CAAO,QAAQ,EAAE,WAAA,EAAY;AACpF,MAAA,MAAM,QAAA,GAAW,UAAA,GAAa,WAAA,CAAY,MAAM,IAAI,MAAA,CAAO,QAAA;AAE3D,MAAA,IAAI,gBAAA,CAAiB,OAAO,CAAA,IAAK,KAAA;AAC7B,QAAA,MAAM,IAAI,YAAA,CAAa,CAAA,gBAAA,EAAmB,OAAO,CAAA,gBAAA,CAAkB,CAAA;AAEvE,MAAA,MAAM,IAAA,GAAuB;AAAA,QACzB,QAAA,EAAU,UAAA,GAAa,MAAA,GAAS,MAAA,CAAO,QAAA;AAAA,QACvC,cAAc,EAAC;AAAA,QACf,QAAQ,EAAC;AAAA,QACT;AAAA,OACJ;AAEA,MAAA,IAAI,cAAA,EAAgB,IAAA,CAAK,MAAA,CAAO,IAAA,GAAO,QAAA;AAAA,WAClC,IAAA,CAAK,OAAO,IAAA,GAAO,QAAA;AAExB,MAAA,QAAQ,OAAA;AAAS,QACb,KAAK,KAAA;AAAA,QACL,KAAK,MAAA;AAAA,QACL,KAAK,KAAA;AAAA,QACL,KAAK,MAAA,EAAQ;AACT,UAAA,MAAM,SAAA,GAAY,UAAA,GAAa,MAAM,gBAAA,CAAiB,GAAA,EAAK,MAAM,CAAA,GAAI,aAAA,CAAA,cAAA,CAAA,EAAA,EAAK,MAAA,CAAO,QAAA,CAAA,EAAZ,EAAsB,QAAA,EAAS,CAAA;AACpG,UAAA,IAAI,mBAAA,CAAoB,UAAU,SAAU,CAAA;AACxC,YAAA,MAAM,IAAI,YAAA;AAAA,cACN,CAAA,KAAA,EAAQ,QAAQ,CAAA,6BAAA,EAAgC,SAAA,CAAU,sBAAsB,CAAA,EAAA;AAAA,aACpF;AAEJ,UAAA,IAAA,CAAK,QAAA,GAAW,SAAA;AAChB,UAAA,IAAA,CAAK,QAAA,GAAW,OAAA;AAEhB,UAAA,IAAA,CAAK,OAAO,UAAA,GAAa,IAAA,CAAK,KAAK,IAAA,CAAK,QAAA,CAAS,YAAa,SAAS,CAAA;AACvE,UAAA,IAAA,CAAK,OAAO,QAAA,GAAW,QAAA;AACvB,UAAA,IAAA,CAAK,OAAO,QAAA,GAAW,QAAA,EAAA;AACvB,UAAA,IAAA,CAAK,MAAA,CAAO,YAAY,SAAA,CAAU,SAAA;AAClC,UAAA,IAAA,CAAK,MAAA,CAAO,OAAO,GAAA,CAAI,IAAA;AACvB,UAAA,IAAA,CAAK,OAAO,MAAA,GAAS,CAAA;AACrB,UAAA,IAAA,CAAK,OAAO,GAAA,GAAM,CAAA;AAClB,UAAA,IAAA,CAAK,OAAO,OAAA,GAAU,CAAA;AAEtB,UAAA;AAAA,QACJ;AAAA,QACA,KAAK,KAAA,EAAO;AACR,UAAA,MAAM,YAAY,UAAA,GAAa,MAAM,YAAY,MAAM,CAAA,GAAI,OAAO,QAAA,CAAS,SAAA;AAC3E,UAAA,IAAI,oBAAoB,SAAS,CAAA;AAC7B,YAAA,MAAM,IAAI,YAAA;AAAA,cACN,CAAA,KAAA,EAAQ,QAAQ,CAAA,6BAAA,EAAgC,SAAA,CAAU,sBAAsB,CAAA,EAAA;AAAA,aACpF;AAEJ,UAAA,IAAA,CAAK,QAAA,GAAW,OAAA;AAChB,UAAA,IAAA,CAAK,QAAA,GAAW;AAAA,YACZ,QAAA;AAAA,YACA,SAAA,EAAW;AAAA,WACf;AAEA,UAAA,IAAA,CAAK,OAAO,UAAA,GAAa,IAAA,CAAK,KAAK,IAAA,CAAK,QAAA,CAAS,YAAa,SAAS,CAAA;AACvE,UAAA,IAAA,CAAK,OAAO,QAAA,GAAW,QAAA;AACvB,UAAA,IAAA,CAAK,OAAO,QAAA,GAAW,QAAA,EAAA;AACvB,UAAA,IAAA,CAAK,OAAO,SAAA,GAAY,SAAA;AACxB,UAAA,IAAA,CAAK,MAAA,CAAO,OAAO,GAAA,CAAI,IAAA;AACvB,UAAA,IAAA,CAAK,OAAO,MAAA,GAAS,CAAA;AACrB,UAAA,IAAA,CAAK,OAAO,GAAA,GAAM,CAAA;AAClB,UAAA,IAAA,CAAK,OAAO,OAAA,GAAU,CAAA;AAEtB,UAAA;AAAA,QACJ;AAAA,QACA,SAAS;AACL,UAAA,MAAM,WAAW,UAAA,GAAa,MAAM,YAAY,MAAM,CAAA,GAAI,OAAO,QAAA,CAAS,SAAA;AAC1E,UAAA,IAAI,oBAAoB,QAAQ,CAAA;AAC5B,YAAA,MAAM,IAAI,YAAA;AAAA,cACN,CAAA,KAAA,EAAQ,QAAQ,CAAA,6BAAA,EAAgC,SAAA,CAAU,sBAAsB,CAAA,EAAA;AAAA,aACpF;AAEJ,UAAA,IAAA,CAAK,QAAA,GAAW,QAAA;AAChB,UAAA,IAAA,CAAK,QAAA,GAAW;AAAA,YACZ,QAAA;AAAA,YACA,SAAA,EAAW;AAAA,WACf;AAEA,UAAA,IAAA,CAAK,OAAO,UAAA,GAAa,IAAA,CAAK,KAAK,IAAA,CAAK,QAAA,CAAS,YAAa,SAAS,CAAA;AACvE,UAAA,IAAA,CAAK,OAAO,QAAA,GAAW,QAAA;AACvB,UAAA,IAAA,CAAK,OAAO,QAAA,GAAW,QAAA,EAAA;AACvB,UAAA,IAAA,CAAK,OAAO,SAAA,GAAY,QAAA;AACxB,UAAA,IAAA,CAAK,MAAA,CAAO,OAAO,GAAA,CAAI,IAAA;AACvB,UAAA,IAAA,CAAK,OAAO,MAAA,GAAS,CAAA;AACrB,UAAA,IAAA,CAAK,OAAO,GAAA,GAAM,CAAA;AAClB,UAAA,IAAA,CAAK,OAAO,OAAA,GAAU,CAAA;AAEtB,UAAA;AAAA,QACJ;AAAA;AAGJ,MAAA,MAAM,UAAA,GAAa,aAAa,MAAMA,EAAAA,CAAG,SAAS,QAAA,CAAS,MAAM,IAAI,MAAA,CAAO,IAAA;AAC5E,MAAA,KAAA,IAAS,IAAI,CAAA,EAAG,CAAA,GAAI,IAAA,CAAK,MAAA,CAAO,YAAY,CAAA,EAAA,EAAK;AAC7C,QAAA,MAAM,QAAA,GAAW,IAAIC,SAAAA,EAAS;AAC9B,QAAA,MAAM,eAAe,UAAA,CAAW,QAAA,CAAS,IAAI,SAAA,EAAA,CAAY,CAAA,GAAI,KAAK,SAAS,CAAA;AAC3E,QAAA,QAAA,CAAS,MAAA,CAAO,gBAAgB,YAAA,EAAc;AAAA,UAC1C,QAAA,EAAU,QAAA;AAAA,UACV,WAAA,EAAa;AAAA,SAChB,CAAA;AAED,QAAA,IAAA,CAAK,YAAA,CAAa,CAAC,CAAA,GAAI,QAAA;AAAA,MAC3B;AACA,MAAA,eAAA,CAAgB,KAAK,IAAI,CAAA;AAAA,IAC7B;AAEA,IAAA,MAAM,QAAA,GAAW,EAAC,EACd,OAAA,GAAkC,EAAC;AAEvC,IAAA,KAAA,MAAW,QAAQ,eAAA,EAAiB;AAChC,MAAA,KAAA,IAAS,IAAI,CAAA,EAAG,CAAA,GAAI,IAAA,CAAK,MAAA,CAAO,YAAY,CAAA,EAAA,EAAK;AAC7C,QAAA,MAAM,kBAAkB,KAAA,CAAM,SAAA,CAAU,KAAK,SAAA,CAAU,IAAA,CAAK,MAAM,CAAC,CAAA;AACnE,QAAA,IAAI,CAAC,eAAA,EAAiB,MAAM,IAAI,aAAa,2BAA2B,CAAA;AAExE,QAAA,QAAA,CAAS,IAAA;AAAA,UACL,KAAA,CACK,OAAA;AAAA,YACG,KAAA,CAAM,OAAA,CAAQ,GAAA,GAAM,OAAA,CAAQ,IAAA,CAAK,QAAQ,CAAA,EAAG,EAAE,IAAA,EAAM,SAAA,EAAW,MAAA,EAAQ,eAAA,EAAiB,CAAA;AAAA,YACxF;AAAA,cACI,MAAA,EAAQ,MAAA;AAAA,cACR,OAAA,EAAS,IAAA,CAAK,YAAA,CAAa,CAAC,EAAE,UAAA,EAAW;AAAA,cACzC,IAAA,EAAM,IAAA,CAAK,YAAA,CAAa,CAAC,EAAE,SAAA;AAAU;AACzC,WACJ,CACC,IAAA,CAAK,OAAO,QAAA,KAAa;AAItB,YAAA,MAAM,OAAA,GAAU,MAAM,eAAA,CAA6B,GAAA,EAAK,QAAQ,CAAA;AAEhE,YAAA,IAAI,OAAA,IAAW,OAAA,CAAQ,MAAA,IAAU,IAAA,IAAQ,QAAQ,OAAA,IAAW,IAAA;AACxD,cAAA,MAAM,IAAI,OAAA,CAAc,CAAC,OAAA,KAAY;AACjC,gBAAA,IAAI,IAAA,CAAK,QAAA,IAAY,OAAA,IAAW,IAAA,CAAK,YAAY,QAAA,EAAU;AACvD,kBAAA,MAAM,cAAA,GAAiC,OAAO,MAAA,KAAW;AACrD,oBAAA,MAAM,MAAA,GAAS,aAAA,CAAA,cAAA,CAAA,cAAA,CAAA;AAAA,sBACX,UAAU,IAAA,CAAK;AAAA,qBAAA,EACZ,UACA,MAAA,CAAA,EAHQ;AAAA,sBAIX,SAAA,EAAW,KAAK,QAAA,CAAS,SAAA;AAAA,sBACzB,QAAA,EAAU,KAAK,QAAA,CAAS,QAAA;AAAA,sBACxB,QAAA,EAAA,CACI,MAAM,qBAAA,CAAsB,IAAA,CAAK,QAAQ,IAAA,CAAK,QAAA,CAAS,SAAS,CAAA,EAClE;AAAA,qBACN,CAAA;AACA,oBAAA,OAAA,CAAQ,KAAK,MAAM,CAAA;AACnB,oBAAA,OAAA,EAAQ;AAAA,kBACZ,CAAA;AAEA,kBAAA,GAAA,CAAI,gBAAgB,GAAA,CAAI,OAAA,CAAQ,MAAA,CAAQ,QAAA,IAAY,cAAc,CAAA;AAAA,gBACtE;AAEA,gBAAA,IAAI,IAAA,CAAK,YAAY,OAAA,EAAS;AAC1B,kBAAA,MAAM,MAAA,GAAS;AAAA,oBACX,QAAA,EAAU,OAAA;AAAA,oBACV,KAAA,EAAO,KAAK,QAAA,CAAS,KAAA;AAAA,oBACrB,MAAA,EAAQ,KAAK,QAAA,CAAS,MAAA;AAAA,oBACtB,SAAA,EAAW,KAAK,QAAA,CAAS,SAAA;AAAA,oBACzB,MAAA,EAAQ,KAAK,QAAA,CAAS,SAAA;AAAA,oBAEtB,UAAU,OAAA,CAAQ,QAAA;AAAA,oBAClB,WAAW,OAAA,CAAQ,SAAA;AAAA,oBACnB,OAAO,OAAA,CAAQ,KAAA;AAAA,oBACf,UAAU,OAAA,CAAQ,QAAA;AAAA,oBAClB,SAAS,OAAA,CAAQ,OAAA;AAAA,oBAEjB,SAAS,OAAA,CAAQ,OAAA;AAAA,oBACjB,cAAc,OAAA,CAAQ;AAAA,mBAC1B;AACA,kBAAA,OAAA,CAAQ,KAAK,MAAM,CAAA;AACnB,kBAAA,OAAA,EAAQ;AAAA,gBACZ;AAAA,cACJ,CAAC,CAAA;AAAA,UACT,CAAC;AAAA,SACT;AACA,QAAA,IAAA,CAAK,MAAA,CAAO,OAAA,EAAA;AAAA,MAChB;AAAA,IACJ;AAEA,IAAA,MAAM,OAAA,CAAQ,IAAI,QAAQ,CAAA;AAE1B,IAAA,OAAO,OAAA;AAAA,EACX,CAAA;AACJ,CAAC,CAAA;AC1VM,IAAM,4BAA4B,UAAA,EAAuC,CAAE,CAAC,GAAA,EAAK,KAAK,KAAA,KAAU;AACnG,EAAA,MAAM,UAAA,GAAa,MAAM,OAAA,CAAQ,CAAA,EAAG,IAAI,aAAA,CAAc,IAAA,CAAK,CAAC,CAAC,CAAA,yBAAA,CAA2B,CAAA;AASxF,EAAA,OAAO,eAAe,mBAAmB,OAAA,EAAoC;AACzE,IAAA,MAAM,gBAAA,GAAmB,OAAO,OAAA,CAAQ,IAAA,IAAQ,QAAA;AAChD,IAAA,MAAM,YAAA,GAAe,mBACf,MAAM,gBAAA,CAAiB,KAAK,OAAA,CAAQ,IAAc,CAAA,GACjD,OAAA,CAAQ,IAAA,CAA8E,QAAA;AAE7F,IAAA,MAAM,QAAA,GAAW,aAAa,SAAA,IAAa,CAAA;AAE3C,IAAA,MAAM,UAAA,GAAa,gBAAA,GACb,MAAMD,EAAAA,CAAG,QAAA,CAAS,SAAS,OAAA,CAAQ,IAAc,CAAA,GAChD,OAAA,CAAQ,IAAA,CAA0B,IAAA;AAEzC,IAAA,MAAM,QAAA,GAAW,IAAIC,SAAAA,EAAS;AAC9B,IAAA,QAAA,CAAS,MAAA,CAAO,gBAAgB,UAAA,EAAY;AAAA,MACxC,QAAA,EAAU,WAAA;AAAA,MACV,WAAA,EAAa;AAAA,KAChB,CAAA;AAED,IAAA,MAAM,MAAA,GAAS;AAAA,MACX,UAAA,EAAY,CAAA;AAAA,MACZ,QAAA,EAAU,CAAA,kBAAA,EAAqB,IAAA,CAAK,GAAA,EAAK,CAAA,IAAA,CAAA;AAAA,MACzC,QAAA,EAAU,KAAK,GAAA,EAAI;AAAA,MACnB,SAAA,EAAW,QAAA;AAAA,MACX,MAAM,GAAA,CAAI,IAAA;AAAA,MACV,OAAA,EAAS,CAAA;AAAA,MACT,IAAA,EAAM,IAAI,SAAA,CAAU,UAAA;AAAA,MACpB,SAAA,EAAW;AAAA,KACf;AAEA,IAAA,MAAM,kBAAkB,KAAA,CAAM,SAAA,CAAU,IAAA,CAAK,SAAA,CAAU,MAAM,CAAC,CAAA;AAC9D,IAAA,IAAI,CAAC,eAAA,EAAiB,MAAM,IAAI,aAAa,0BAA0B,CAAA;AAEvE,IAAA,MAAM,QAAA,GAAW,MAAM,KAAA,CAAM,OAAA;AAAA,MACzB,KAAA,CAAM,QAAQ,UAAA,EAAY;AAAA,QACtB,MAAA,EAAQ;AAAA,OACX,CAAA;AAAA,MACD;AAAA,QACI,MAAA,EAAQ,MAAA;AAAA,QACR,OAAA,EAAS,SAAS,UAAA,EAAW;AAAA,QAC7B,IAAA,EAAM,SAAS,SAAA;AAAU;AAC7B,KACJ;AAEA,IAAA,OAAO,KAAA,CAAM,QAAQ,QAAQ,CAAA;AAAA,EACjC,CAAA;AACJ,CAAC,CAAA;ACjEM,IAAM,kBAAkB,UAAA,EAA6B,CAAE,CAAC,GAAA,EAAK,KAAK,KAAA,KAAU;AAC/E,EAAA,MAAM,UAAA,GAAa,MAAM,OAAA,CAAQ,CAAA,EAAG,IAAI,aAAA,CAAc,KAAA,CAAM,CAAC,CAAC,CAAA,cAAA,CAAgB,CAAA;AAU9E,EAAA,OAAO,eAAe,QAAA,CAAS,MAAA,EAAgB,QAAA,EAA6B;AACxE,IAAA,MAAM,SAAA,GAAYF,YAAU,QAAQ,CAAA;AAEpC,IAAA,MAAM,MAAA,GAAS;AAAA,MACX,OAAA,EAAS,MAAA;AAAA,MACT,UAAA,EAAY,SAAA;AAAA;AAAA,MACZ,MAAM,GAAA,CAAI;AAAA,KACd;AAEA,IAAA,MAAM,kBAAkB,KAAA,CAAM,SAAA,CAAU,IAAA,CAAK,SAAA,CAAU,MAAM,CAAC,CAAA;AAC9D,IAAA,IAAI,CAAC,eAAA,EAAiB,MAAM,IAAI,aAAa,0BAA0B,CAAA;AAEvE,IAAA,MAAM,QAAA,GAAW,MAAM,KAAA,CAAM,OAAA,CAAQ,KAAA,CAAM,OAAA,CAAQ,UAAA,EAAY,EAAE,MAAA,EAAQ,eAAA,EAAiB,CAAA,EAAG;AAAA,MACzF,MAAA,EAAQ;AAAA,KACX,CAAA;AAED,IAAA,OAAO,KAAA,CAAM,QAAQ,QAAQ,CAAA;AAAA,EACjC,CAAA;AACJ,CAAC,CAAA;;;AChCM,IAAM,gBAAgB,UAAA,EAAgB,CAAE,CAAC,GAAA,EAAK,KAAK,KAAA,KAAU;AAChE,EAAA,OAAO,SAAS,MAAA,CAAmB,IAAA,EAAc,QAAA,EAAmC;AAChF,IAAA,MAAA,CAAO,cAAA,CAAe,KAAK,IAAA,EAAM;AAAA,MAC7B,KAAA,EAAO,SAAU,KAAA,EAAU;AACvB,QAAA,OAAO,QAAA,CAAS,EAAE,GAAA,EAAK,KAAA,EAAO,OAAO,CAAA;AAAA,MACzC,CAAA;AAAA,MACA,QAAA,EAAU,KAAA;AAAA,MACV,UAAA,EAAY,KAAA;AAAA,MACZ,YAAA,EAAc;AAAA,KACjB,CAAA;AAAA,EACL,CAAA;AACJ,CAAC,CAAA;;;ACyHM,IAAM,MAAN,MAAU;AAAA,EA6Ib,WAAA,CAAY,GAAA,EAAqB,aAAA,EAA8B,MAAA,EAAkB;AAC7E,IAAA,IAAA,CAAK,aAAA,GAAgB,aAAA;AACrB,IAAA,IAAA,CAAK,QAAA,GAAW,IAAI,QAAA,CAAS,GAAA,EAAK,MAAM,CAAA;AAExC,IAAA,IAAA,CAAK,mBAAA,GAAsB,0BAAA,CAA2B,GAAA,EAAK,IAAI,CAAA;AAC/D,IAAA,IAAA,CAAK,qBAAA,GAAwB,4BAAA,CAA6B,GAAA,EAAK,IAAI,CAAA;AACnE,IAAA,IAAA,CAAK,cAAA,GAAiB,qBAAA,CAAsB,GAAA,EAAK,IAAI,CAAA;AACrD,IAAA,IAAA,CAAK,cAAA,GAAiB,qBAAA,CAAsB,GAAA,EAAK,IAAI,CAAA;AACrD,IAAA,IAAA,CAAK,eAAA,GAAkB,sBAAA,CAAuB,GAAA,EAAK,IAAI,CAAA;AACvD,IAAA,IAAA,CAAK,WAAA,GAAc,kBAAA,CAAmB,GAAA,EAAK,IAAI,CAAA;AAC/C,IAAA,IAAA,CAAK,aAAA,GAAgB,oBAAA,CAAqB,GAAA,EAAK,IAAI,CAAA;AACnD,IAAA,IAAA,CAAK,cAAA,GAAiB,qBAAA,CAAsB,GAAA,EAAK,IAAI,CAAA;AACrD,IAAA,IAAA,CAAK,SAAA,GAAY,gBAAA,CAAiB,GAAA,EAAK,IAAI,CAAA;AAC3C,IAAA,IAAA,CAAK,aAAA,GAAgB,oBAAA,CAAqB,GAAA,EAAK,IAAI,CAAA;AACnD,IAAA,IAAA,CAAK,mBAAA,GAAsB,0BAAA,CAA2B,GAAA,EAAK,IAAI,CAAA;AAC/D,IAAA,IAAA,CAAK,iBAAA,GAAoB,wBAAA,CAAyB,GAAA,EAAK,IAAI,CAAA;AAC3D,IAAA,IAAA,CAAK,iBAAA,GAAoB,wBAAA,CAAyB,GAAA,EAAK,IAAI,CAAA;AAC3D,IAAA,IAAA,CAAK,eAAA,GAAkB,sBAAA,CAAuB,GAAA,EAAK,IAAI,CAAA;AACvD,IAAA,IAAA,CAAK,gBAAA,GAAmB,uBAAA,CAAwB,GAAA,EAAK,IAAI,CAAA;AACzD,IAAA,IAAA,CAAK,eAAA,GAAkB,sBAAA,CAAuB,GAAA,EAAK,IAAI,CAAA;AACvD,IAAA,IAAA,CAAK,aAAA,GAAgB,oBAAA,CAAqB,GAAA,EAAK,IAAI,CAAA;AACnD,IAAA,IAAA,CAAK,WAAA,GAAc,kBAAA,CAAmB,GAAA,EAAK,IAAI,CAAA;AAC/C,IAAA,IAAA,CAAK,UAAA,GAAa,iBAAA,CAAkB,GAAA,EAAK,IAAI,CAAA;AAC7C,IAAA,IAAA,CAAK,UAAA,GAAa,iBAAA,CAAkB,GAAA,EAAK,IAAI,CAAA;AAC7C,IAAA,IAAA,CAAK,oBAAA,GAAuB,2BAAA,CAA4B,GAAA,EAAK,IAAI,CAAA;AACjE,IAAA,IAAA,CAAK,cAAA,GAAiB,qBAAA,CAAsB,GAAA,EAAK,IAAI,CAAA;AACrD,IAAA,IAAA,CAAK,eAAA,GAAkB,sBAAA,CAAuB,GAAA,EAAK,IAAI,CAAA;AACvD,IAAA,IAAA,CAAK,YAAA,GAAe,mBAAA,CAAoB,GAAA,EAAK,IAAI,CAAA;AACjD,IAAA,IAAA,CAAK,aAAA,GAAgB,oBAAA,CAAqB,GAAA,EAAK,IAAI,CAAA;AACnD,IAAA,IAAA,CAAK,UAAA,GAAa,iBAAA,CAAkB,GAAA,EAAK,IAAI,CAAA;AAC7C,IAAA,IAAA,CAAK,oBAAA,GAAuB,2BAAA,CAA4B,GAAA,EAAK,IAAI,CAAA;AACjE,IAAA,IAAA,CAAK,aAAA,GAAgB,oBAAA,CAAqB,GAAA,EAAK,IAAI,CAAA;AACnD,IAAA,IAAA,CAAK,oBAAA,GAAuB,2BAAA,CAA4B,GAAA,EAAK,IAAI,CAAA;AACjE,IAAA,IAAA,CAAK,gBAAA,GAAmB,uBAAA,CAAwB,GAAA,EAAK,IAAI,CAAA;AACzD,IAAA,IAAA,CAAK,aAAA,GAAgB,oBAAA,CAAqB,GAAA,EAAK,IAAI,CAAA;AACnD,IAAA,IAAA,CAAK,QAAA,GAAW,eAAA,CAAgB,GAAA,EAAK,IAAI,CAAA;AACzC,IAAA,IAAA,CAAK,YAAA,GAAe,mBAAA,CAAoB,GAAA,EAAK,IAAI,CAAA;AACjD,IAAA,IAAA,CAAK,eAAA,GAAkB,sBAAA,CAAuB,GAAA,EAAK,IAAI,CAAA;AACvD,IAAA,IAAA,CAAK,gBAAA,GAAmB,uBAAA,CAAwB,GAAA,EAAK,IAAI,CAAA;AACzD,IAAA,IAAA,CAAK,QAAA,GAAW,eAAA,CAAgB,GAAA,EAAK,IAAI,CAAA;AACzC,IAAA,IAAA,CAAK,cAAA,GAAiB,qBAAA,CAAsB,GAAA,EAAK,IAAI,CAAA;AACrD,IAAA,IAAA,CAAK,YAAA,GAAe,mBAAA,CAAoB,GAAA,EAAK,IAAI,CAAA;AACjD,IAAA,IAAA,CAAK,aAAA,GAAgB,oBAAA,CAAqB,GAAA,EAAK,IAAI,CAAA;AACnD,IAAA,IAAA,CAAK,YAAA,GAAe,mBAAA,CAAoB,GAAA,EAAK,IAAI,CAAA;AACjD,IAAA,IAAA,CAAK,mBAAA,GAAsB,0BAAA,CAA2B,GAAA,EAAK,IAAI,CAAA;AAC/D,IAAA,IAAA,CAAK,iBAAA,GAAoB,wBAAA,CAAyB,GAAA,EAAK,IAAI,CAAA;AAC3D,IAAA,IAAA,CAAK,gBAAA,GAAmB,uBAAA,CAAwB,GAAA,EAAK,IAAI,CAAA;AACzD,IAAA,IAAA,CAAK,aAAA,GAAgB,oBAAA,CAAqB,GAAA,EAAK,IAAI,CAAA;AACnD,IAAA,IAAA,CAAK,aAAA,GAAgB,oBAAA,CAAqB,GAAA,EAAK,IAAI,CAAA;AACnD,IAAA,IAAA,CAAK,cAAA,GAAiB,qBAAA,CAAsB,GAAA,EAAK,IAAI,CAAA;AACrD,IAAA,IAAA,CAAK,UAAA,GAAa,iBAAA,CAAkB,GAAA,EAAK,IAAI,CAAA;AAC7C,IAAA,IAAA,CAAK,SAAA,GAAY,gBAAA,CAAiB,GAAA,EAAK,IAAI,CAAA;AAC3C,IAAA,IAAA,CAAK,kBAAA,GAAqB,yBAAA,CAA0B,GAAA,EAAK,IAAI,CAAA;AAC7D,IAAA,IAAA,CAAK,gBAAA,GAAmB,uBAAA,CAAwB,GAAA,EAAK,IAAI,CAAA;AACzD,IAAA,IAAA,CAAK,wBAAA,GAA2B,+BAAA,CAAgC,GAAA,EAAK,IAAI,CAAA;AACzE,IAAA,IAAA,CAAK,sBAAA,GAAyB,6BAAA,CAA8B,GAAA,EAAK,IAAI,CAAA;AACrE,IAAA,IAAA,CAAK,qBAAA,GAAwB,4BAAA,CAA6B,GAAA,EAAK,IAAI,CAAA;AACnE,IAAA,IAAA,CAAK,YAAA,GAAe,mBAAA,CAAoB,GAAA,EAAK,IAAI,CAAA;AACjD,IAAA,IAAA,CAAK,qBAAA,GAAwB,4BAAA,CAA6B,GAAA,EAAK,IAAI,CAAA;AACnE,IAAA,IAAA,CAAK,qBAAA,GAAwB,4BAAA,CAA6B,GAAA,EAAK,IAAI,CAAA;AACnE,IAAA,IAAA,CAAK,kBAAA,GAAqB,yBAAA,CAA0B,GAAA,EAAK,IAAI,CAAA;AAC7D,IAAA,IAAA,CAAK,gBAAA,GAAmB,uBAAA,CAAwB,GAAA,EAAK,IAAI,CAAA;AACzD,IAAA,IAAA,CAAK,mBAAA,GAAsB,0BAAA,CAA2B,GAAA,EAAK,IAAI,CAAA;AAC/D,IAAA,IAAA,CAAK,sBAAA,GAAyB,6BAAA,CAA8B,GAAA,EAAK,IAAI,CAAA;AACrE,IAAA,IAAA,CAAK,SAAA,GAAY,gBAAA,CAAiB,GAAA,EAAK,IAAI,CAAA;AAC3C,IAAA,IAAA,CAAK,YAAA,GAAe,mBAAA,CAAoB,GAAA,EAAK,IAAI,CAAA;AACjD,IAAA,IAAA,CAAK,eAAA,GAAkB,sBAAA,CAAuB,GAAA,EAAK,IAAI,CAAA;AACvD,IAAA,IAAA,CAAK,OAAA,GAAU,cAAA,CAAe,GAAA,EAAK,IAAI,CAAA;AACvC,IAAA,IAAA,CAAK,QAAA,GAAW,eAAA,CAAgB,GAAA,EAAK,IAAI,CAAA;AACzC,IAAA,IAAA,CAAK,sBAAA,GAAyB,6BAAA,CAA8B,GAAA,EAAK,IAAI,CAAA;AACrE,IAAA,IAAA,CAAK,mBAAA,GAAsB,0BAAA,CAA2B,GAAA,EAAK,IAAI,CAAA;AAC/D,IAAA,IAAA,CAAK,aAAA,GAAgB,oBAAA,CAAqB,GAAA,EAAK,IAAI,CAAA;AACnD,IAAA,IAAA,CAAK,qBAAA,GAAwB,4BAAA,CAA6B,GAAA,EAAK,IAAI,CAAA;AACnE,IAAA,IAAA,CAAK,KAAA,GAAQ,YAAA,CAAa,GAAA,EAAK,IAAI,CAAA;AACnC,IAAA,IAAA,CAAK,mBAAA,GAAsB,0BAAA,CAA2B,GAAA,EAAK,IAAI,CAAA;AAC/D,IAAA,IAAA,CAAK,qBAAA,GAAwB,4BAAA,CAA6B,GAAA,EAAK,IAAI,CAAA;AACnE,IAAA,IAAA,CAAK,WAAA,GAAc,kBAAA,CAAmB,GAAA,EAAK,IAAI,CAAA;AAC/C,IAAA,IAAA,CAAK,oBAAA,GAAuB,2BAAA,CAA4B,GAAA,EAAK,IAAI,CAAA;AACjE,IAAA,IAAA,CAAK,oBAAA,GAAuB,2BAAA,CAA4B,GAAA,EAAK,IAAI,CAAA;AACjE,IAAA,IAAA,CAAK,WAAA,GAAc,kBAAA,CAAmB,GAAA,EAAK,IAAI,CAAA;AAC/C,IAAA,IAAA,CAAK,WAAA,GAAc,kBAAA,CAAmB,GAAA,EAAK,IAAI,CAAA;AAC/C,IAAA,IAAA,CAAK,iBAAA,GAAoB,wBAAA,CAAyB,GAAA,EAAK,IAAI,CAAA;AAC3D,IAAA,IAAA,CAAK,aAAA,GAAgB,oBAAA,CAAqB,GAAA,EAAK,IAAI,CAAA;AACnD,IAAA,IAAA,CAAK,WAAA,GAAc,kBAAA,CAAmB,GAAA,EAAK,IAAI,CAAA;AAC/C,IAAA,IAAA,CAAK,kBAAA,GAAqB,yBAAA,CAA0B,GAAA,EAAK,IAAI,CAAA;AAC7D,IAAA,IAAA,CAAK,kBAAA,GAAqB,yBAAA,CAA0B,GAAA,EAAK,IAAI,CAAA;AAC7D,IAAA,IAAA,CAAK,aAAA,GAAgB,oBAAA,CAAqB,GAAA,EAAK,IAAI,CAAA;AACnD,IAAA,IAAA,CAAK,SAAA,GAAY,gBAAA,CAAiB,GAAA,EAAK,IAAI,CAAA;AAC3C,IAAA,IAAA,CAAK,UAAA,GAAa,iBAAA,CAAkB,GAAA,EAAK,IAAI,CAAA;AAC7C,IAAA,IAAA,CAAK,UAAA,GAAa,iBAAA,CAAkB,GAAA,EAAK,IAAI,CAAA;AAC7C,IAAA,IAAA,CAAK,QAAA,GAAW,eAAA,CAAgB,GAAA,EAAK,IAAI,CAAA;AACzC,IAAA,IAAA,CAAK,SAAA,GAAY,gBAAA,CAAiB,GAAA,EAAK,IAAI,CAAA;AAC3C,IAAA,IAAA,CAAK,mBAAA,GAAsB,0BAAA,CAA2B,GAAA,EAAK,IAAI,CAAA;AAC/D,IAAA,IAAA,CAAK,YAAA,GAAe,mBAAA,CAAoB,GAAA,EAAK,IAAI,CAAA;AACjD,IAAA,IAAA,CAAK,iBAAA,GAAoB,wBAAA,CAAyB,GAAA,EAAK,IAAI,CAAA;AAC3D,IAAA,IAAA,CAAK,wBAAA,GAA2B,+BAAA,CAAgC,GAAA,EAAK,IAAI,CAAA;AACzE,IAAA,IAAA,CAAK,iBAAA,GAAoB,wBAAA,CAAyB,GAAA,EAAK,IAAI,CAAA;AAC3D,IAAA,IAAA,CAAK,kBAAA,GAAqB,yBAAA,CAA0B,GAAA,EAAK,IAAI,CAAA;AAC7D,IAAA,IAAA,CAAK,cAAA,GAAiB,qBAAA,CAAsB,GAAA,EAAK,IAAI,CAAA;AACrD,IAAA,IAAA,CAAK,gBAAA,GAAmB,uBAAA,CAAwB,GAAA,EAAK,IAAI,CAAA;AACzD,IAAA,IAAA,CAAK,mBAAA,GAAsB,0BAAA,CAA2B,GAAA,EAAK,IAAI,CAAA;AAC/D,IAAA,IAAA,CAAK,qBAAA,GAAwB,4BAAA,CAA6B,GAAA,EAAK,IAAI,CAAA;AACnE,IAAA,IAAA,CAAK,WAAA,GAAc,kBAAA,CAAmB,GAAA,EAAK,IAAI,CAAA;AAC/C,IAAA,IAAA,CAAK,0BAAA,GAA6B,iCAAA,CAAkC,GAAA,EAAK,IAAI,CAAA;AAC7E,IAAA,IAAA,CAAK,YAAA,GAAe,mBAAA,CAAoB,GAAA,EAAK,IAAI,CAAA;AACjD,IAAA,IAAA,CAAK,QAAA,GAAW,eAAA,CAAgB,GAAA,EAAK,IAAI,CAAA;AACzC,IAAA,IAAA,CAAK,kBAAA,GAAqB,yBAAA,CAA0B,GAAA,EAAK,IAAI,CAAA;AAC7D,IAAA,IAAA,CAAK,iBAAA,GAAoB,wBAAA,CAAyB,GAAA,EAAK,IAAI,CAAA;AAC3D,IAAA,IAAA,CAAK,QAAA,GAAW,eAAA,CAAgB,GAAA,EAAK,IAAI,CAAA;AACzC,IAAA,IAAA,CAAK,WAAA,GAAc,kBAAA,CAAmB,GAAA,EAAK,IAAI,CAAA;AAC/C,IAAA,IAAA,CAAK,UAAA,GAAa,iBAAA,CAAkB,GAAA,EAAK,IAAI,CAAA;AAC7C,IAAA,IAAA,CAAK,aAAA,GAAgB,oBAAA,CAAqB,GAAA,EAAK,IAAI,CAAA;AACnD,IAAA,IAAA,CAAK,WAAA,GAAc,kBAAA,CAAmB,GAAA,EAAK,IAAI,CAAA;AAC/C,IAAA,IAAA,CAAK,eAAA,GAAkB,sBAAA,CAAuB,GAAA,EAAK,IAAI,CAAA;AACvD,IAAA,IAAA,CAAK,SAAA,GAAY,gBAAA,CAAiB,GAAA,EAAK,IAAI,CAAA;AAC3C,IAAA,IAAA,CAAK,SAAA,GAAY,gBAAA,CAAiB,GAAA,EAAK,IAAI,CAAA;AAC3C,IAAA,IAAA,CAAK,sBAAA,GAAyB,6BAAA,CAA8B,GAAA,EAAK,IAAI,CAAA;AACrE,IAAA,IAAA,CAAK,OAAA,GAAU,cAAA,CAAe,GAAA,EAAK,IAAI,CAAA;AACvC,IAAA,IAAA,CAAK,sBAAA,GAAyB,6BAAA,CAA8B,GAAA,EAAK,IAAI,CAAA;AACrE,IAAA,IAAA,CAAK,SAAA,GAAY,gBAAA,CAAiB,GAAA,EAAK,IAAI,CAAA;AAC3C,IAAA,IAAA,CAAK,WAAA,GAAc,kBAAA,CAAmB,GAAA,EAAK,IAAI,CAAA;AAC/C,IAAA,IAAA,CAAK,IAAA,GAAO,WAAA,CAAY,GAAA,EAAK,IAAI,CAAA;AACjC,IAAA,IAAA,CAAK,iBAAA,GAAoB,wBAAA,CAAyB,GAAA,EAAK,IAAI,CAAA;AAC3D,IAAA,IAAA,CAAK,kBAAA,GAAqB,yBAAA,CAA0B,GAAA,EAAK,IAAI,CAAA;AAC7D,IAAA,IAAA,CAAK,oBAAA,GAAuB,2BAAA,CAA4B,GAAA,EAAK,IAAI,CAAA;AACjE,IAAA,IAAA,CAAK,eAAA,GAAkB,sBAAA,CAAuB,GAAA,EAAK,IAAI,CAAA;AACvD,IAAA,IAAA,CAAK,aAAA,GAAgB,oBAAA,CAAqB,GAAA,EAAK,IAAI,CAAA;AACnD,IAAA,IAAA,CAAK,mBAAA,GAAsB,0BAAA,CAA2B,GAAA,EAAK,IAAI,CAAA;AAC/D,IAAA,IAAA,CAAK,sBAAA,GAAyB,6BAAA,CAA8B,GAAA,EAAK,IAAI,CAAA;AACrE,IAAA,IAAA,CAAK,YAAA,GAAe,mBAAA,CAAoB,GAAA,EAAK,IAAI,CAAA;AACjD,IAAA,IAAA,CAAK,UAAA,GAAa,iBAAA,CAAkB,GAAA,EAAK,IAAI,CAAA;AAC7C,IAAA,IAAA,CAAK,oBAAA,GAAuB,2BAAA,CAA4B,GAAA,EAAK,IAAI,CAAA;AACjE,IAAA,IAAA,CAAK,aAAA,GAAgB,oBAAA,CAAqB,GAAA,EAAK,IAAI,CAAA;AACnD,IAAA,IAAA,CAAK,kBAAA,GAAqB,yBAAA,CAA0B,GAAA,EAAK,IAAI,CAAA;AAC7D,IAAA,IAAA,CAAK,cAAA,GAAiB,qBAAA,CAAsB,GAAA,EAAK,IAAI,CAAA;AACrD,IAAA,IAAA,CAAK,gBAAA,GAAmB,uBAAA,CAAwB,GAAA,EAAK,IAAI,CAAA;AACzD,IAAA,IAAA,CAAK,kBAAA,GAAqB,yBAAA,CAA0B,GAAA,EAAK,IAAI,CAAA;AAC7D,IAAA,IAAA,CAAK,QAAA,GAAW,eAAA,CAAgB,GAAA,EAAK,IAAI,CAAA;AAEzC,IAAA,IAAA,CAAK,MAAA,GAAS,aAAA,CAAc,GAAA,EAAK,IAAI,CAAA;AAAA,EACzC;AACJ;;;AChYO,IAAM,OAAN,MAAW;AAAA,EAGd,WAAA,CAAoB,OAAA,GAA4B,EAAC,EAAG;AAAhC,IAAA,IAAA,CAAA,OAAA,GAAA,OAAA;AAFpB,IAAA,IAAA,CAAQ,kBAAA,GAAqB,IAAA;AAAA,EAEwB;AAAA,EAE7C,aAAa,MAAA,EAAsD;AA1C/E,IAAA,IAAA,EAAA;AA2CQ,IAAA,MAAM,YAAY,KAAA,CAAM,OAAA,CAAQ,MAAM,CAAA,GAAI,SAAS,MAAA,CAAO,OAAA;AAE1D,IAAA,SAAA,CAAU,OAAA,CAAQ,CAAC,CAAA,EAAG,CAAA,KAAM;AACxB,MAAA,IAAI,OAAO,CAAA,CAAE,MAAA,IAAU,QAAA,IAAY,CAAA,CAAE,OAAO,UAAA,CAAW,GAAG,CAAA,EAAG,SAAA,CAAU,CAAC,CAAA,CAAE,MAAA,GAAS,CAAA,CAAE,MAAA,CAAO,MAAM,CAAC,CAAA;AAAA,IACvG,CAAC,CAAA;AAED,IAAA,MAAM,GAAA,GAAM,IAAIgB,WAAAA,CAAY,SAAA,EAAU;AACtC,IAAA,KAAA,MAAW,QAAQ,SAAA,EAAW;AAC1B,MAAA,IAAI;AACA,QAAA,GAAA,CAAI,aAAA;AAAA,UAAA,CACA,EAAA,GAAAA,WAAAA,CAAY,MAAA,CAAO,QAAA,CAAS,iCACrB,IAAA,CAAA,EADqB;AAAA,YAExB,GAAA,EAAM,IAAA,CAAsC,GAAA,IAAO,IAAA,CAAK;AAAA,WAC5D,CAAC,MAHD,IAAA,GAAA,EAAA,GAGM,EAAA;AAAA,UACN;AAAA,SACJ;AAAA,MACJ,SAAS,KAAA,EAAgB;AACrB,QAAA,MAAA,CAAO;AAAA,UACH,OAAA,EAAS;AAAA,YACL,OAAA,EAAS,KAAK,OAAA,CAAQ;AAAA;AAC1B,SACH,CAAA,CAAE,KAAA,CAAM,uBAAA,EAAyB,KAAK,CAAA;AAAA,MAC3C;AAAA,IACJ;AACA,IAAA,OAAO,GAAA;AAAA,EACX;AAAA,EAEQ,eAAe,WAAA,EAA0B;AAC7C,IAAA,IAAI,CAAC,YAAY,IAAA,IAAQ,CAAC,YAAY,MAAA,IAAU,CAAC,YAAY,SAAA,EAAW;AACpE,MAAA,MAAM,IAAI,aAAa,yBAAyB,CAAA;AAAA,IACpD;AAAA,EACJ;AAAA,EAEA,MAAa,MAAM,WAAA,EAA0B;AACzC,IAAA,MAAM,MAAM,aAAA,CAAc,IAAA,CAAK,QAAQ,OAAA,EAAS,IAAA,CAAK,QAAQ,UAAU,CAAA;AACvE,IAAA,MAAA,CAAO,MAAA,CAAO,GAAA,CAAI,OAAA,EAAS,IAAA,CAAK,OAAO,CAAA;AAEvC,IAAA,OAAO,IAAA,CAAK,WAAA,CAAY,GAAA,EAAK,WAAW,CAAA;AAAA,EAC5C;AAAA,EAEA,MAAc,WAAA,CAAY,GAAA,EAAkB,WAAA,EAA0B;AAClE,IAAA,MAAM,YAAY,GAAG,CAAA;AAErB,IAAA,IAAA,CAAK,eAAe,WAAW,CAAA;AAE/B,IAAA,GAAA,CAAI,OAAO,WAAA,CAAY,IAAA;AACvB,IAAA,GAAA,CAAI,MAAA,GAAS,IAAA,CAAK,YAAA,CAAa,WAAA,CAAY,MAAM,CAAA;AACjD,IAAA,GAAA,CAAI,YAAY,WAAA,CAAY,SAAA;AAC5B,IAAA,GAAA,CAAI,QAAA,GAAW,YAAY,QAAA,IAAY,IAAA;AAEvC,IAAA,MAAM,SAAA,GAAY,MAAM,KAAA,CAAM,GAAA,EAAK,KAAK,kBAAkB,CAAA;AAC1D,IAAA,MAAM,UAAA,GAAa,MAAM,aAAA,CAAc,GAAA,EAAK,KAAK,kBAAkB,CAAA;AAEnE,IAAA,MAAM,YAAY,SAAA,IAAA,IAAA,GAAA,MAAA,GAAA,SAAA,CAAW,IAAA;AAE7B,IAAA,IAAI,CAAC,aAAa,CAAC,SAAA,IAAa,CAAC,UAAA,EAAY,MAAM,IAAI,YAAA,CAAa,6CAAoB,CAAA;AAExF,IAAA,GAAA,CAAI,YAAY,SAAA,CAAU,OAAA;AAC1B,IAAA,GAAA,CAAI,MAAM,SAAA,CAAU,GAAA;AAIpB,IAAA,GAAA,CAAI,QAAA,GAAW,UAAA,CAAW,SAAA,IAAa,UAAA,CAAW,QAAA;AAElD,IAAA,GAAA,CAAI,WAAW,UAAA,CAAW,SAAA;AAC1B,IAAA,GAAA,CAAI,SAAA,GAAY,SAAA;AAEhB,IAAA,IAAI,CAAC,gBAAA,CAAiB,GAAG,GAAG,MAAM,IAAI,aAAa,2DAA6B,CAAA;AAEhF,IAAA,MAAA,CAAO,GAAG,CAAA,CAAE,IAAA,CAAK,cAAA,EAAgB,UAAU,GAAG,CAAA;AAE9C,IAAA,OAAO,IAAI,GAAA,CAAI,GAAA,EAAK,SAAA,CAAU,kBAAA,EAAoB,UAAU,MAAM,CAAA;AAAA,EACtE;AAAA,EAEA,MAAa,OAAA,CACT,OAAA,EACA,QAAA,EACF;AACE,IAAA,IAAI,CAAC,OAAA,EAAS,OAAA,GAAU,EAAC;AACzB,IAAA,IAAI,CAAC,OAAA,CAAQ,SAAA;AACT,MAAA,OAAA,CAAQ,SAAA,GAAY,kFAAA;AACxB,IAAA,IAAI,CAAC,OAAA,CAAQ,QAAA,EAAU,OAAA,CAAQ,QAAA,GAAW,IAAA;AAE1C,IAAA,MAAM,MAAM,aAAA,CAAc,IAAA,CAAK,QAAQ,OAAA,EAAS,IAAA,CAAK,QAAQ,UAAU,CAAA;AACvE,IAAA,MAAA,CAAO,MAAA,CAAO,GAAA,CAAI,OAAA,EAAS,IAAA,CAAK,OAAO,CAAA;AAEvC,IAAA,MAAM,gBAAgB,MAAM,OAAA;AAAA,MACxB,GAAA;AAAA,MACA,OAAA;AAAA,MACA;AAAA,KACJ;AACA,IAAA,IAAI,CAAC,aAAA,EAAe,MAAM,IAAI,aAAa,6BAA6B,CAAA;AAExE,IAAA,MAAM,IAAA,GAAO,gBAAA,CAAiB,OAAA,CAAQ,SAAS,CAAA;AAE/C,IAAA,IAAI,QAAA,EAAU;AAEV,MAAA,QAAA,CAAS;AAAA,QACL,IAAA,EAAA,CAAA;AAAA,QACA,IAAA,EAAM;AAAA,UACF,QAAQ,aAAA,CAAc,OAAA;AAAA,UACtB,IAAA;AAAA,UACA,WAAW,OAAA,CAAQ;AAAA,SACvB;AAAA,QACA,OAAA,EAAS;AAAA,OACZ,CAAA;AAAA,IACL;AAEA,IAAA,OAAO,IAAA,CAAK,YAAY,GAAA,EAAK;AAAA,MACzB,QAAQ,aAAA,CAAc,OAAA;AAAA,MACtB,IAAA;AAAA,MACA,WAAW,OAAA,CAAQ,SAAA;AAAA,MACnB,UAAU,OAAA,CAAQ;AAAA,KACrB,CAAA;AAAA,EACL;AACJ","file":"index.js","sourcesContent":["export class ZaloApiError extends Error {\n public code: number | null;\n\n constructor(message: string, code?: number) {\n super(message);\n\n this.name = \"ZcaApiError\";\n this.code = code || null;\n }\n}\n","import { ZaloApiError } from \"./ZaloApiError\";\n\nexport class ZaloApiMissingImageMetadataGetter extends ZaloApiError {\n constructor() {\n super(\"Missing `imageMetadataGetter`. Please provide it in the Zalo object options.\");\n this.name = \"ZaloApiMissingImageMetadataGetter\";\n }\n}\n","import { ZaloApiError } from \"./ZaloApiError\";\n\nexport class ZaloApiLoginQRAborted extends ZaloApiError {\n constructor(message: string = \"Operation aborted\") {\n super(message);\n this.name = \"ZaloApiLoginQRAborted\";\n }\n}\n","import { ZaloApiError } from \"./ZaloApiError\";\n\nexport class ZaloApiLoginQRDeclined extends ZaloApiError {\n constructor(message: string = \"Login QR request declined\") {\n super(message);\n this.name = \"ZaloApiLoginQRDeclined\";\n }\n}\n","export type AutoReplyItem = {\n id: number;\n weight: number;\n enable: boolean;\n modifiedTime: number;\n startTime: number;\n endTime: number;\n content: string;\n scope: AutoReplyScope;\n uids: string[] | null;\n ownerId: number;\n recurrence: string[];\n createdTime: number;\n};\n\nexport enum AutoReplyScope {\n Everyone = 0,\n Stranger = 1,\n SpecificFriends = 2,\n FriendsExcept = 3\n}\n","export enum BoardType {\n Note = 1,\n PinnedMessage = 2,\n Poll = 3,\n}\n\nexport type PollDetail = {\n creator: string;\n question: string;\n options: PollOptions[];\n joined: boolean;\n closed: boolean;\n poll_id: number;\n allow_multi_choices: boolean;\n allow_add_new_option: boolean;\n is_anonymous: boolean;\n poll_type: number;\n created_time: number;\n updated_time: number;\n expired_time: number;\n is_hide_vote_preview: boolean;\n num_vote: number;\n};\n\nexport type PollOptions = {\n content: string;\n votes: number;\n voted: boolean;\n voters: string[];\n option_id: number;\n};\n\nexport type NoteDetail = {\n id: string;\n type: number;\n color: number;\n emoji: string;\n startTime: number;\n duration: number;\n params: {\n title: string;\n extra?: string;\n };\n creatorId: string;\n editorId: string;\n createTime: number;\n editTime: number;\n repeat: number;\n};\n\nexport type PinnedMessageDetail = {\n id: string;\n type: number;\n color: number;\n emoji: string;\n startTime: number;\n duration: number;\n params: Record<string, unknown>; // @TODO: Define a more specific type\n creatorId: string;\n editorId: string;\n createTime: number;\n editTime: number;\n repeat: number;\n};\n","export enum ThreadType {\n User,\n Group,\n}\n\nexport enum DestType {\n Group = 1,\n User = 3,\n Page = 5,\n}\n\nexport enum Gender {\n Male = 0,\n Female = 1,\n}\n\n/**\n * @note Bank codes list after Mitm on Mobile and Bank's supported by Zalo\n * @documents https://developers.zalo.me/docs/zalo-notification-service/phu-luc/danh-sach-bin-code - docs missing bin code and short_name bank\n */\nexport enum BinBankCard {\n /**\n * NH TMCP An Bình\n */\n ABBank = 970425,\n /**\n * NH TMCP Á Châu\n */\n ACB = 970416,\n /**\n * NH Nông nghiệp và Phát triển Nông thôn Việt Nam\n */\n Agribank = 970405,\n /**\n * NH TMCP Đầu tư và Phát triển Việt Nam\n */\n BIDV = 970418,\n /**\n * NH TMCP Bản Việt\n */\n BVBank = 970454,\n /**\n * NH TMCP Bắc Á\n */\n BacA_Bank = 970409,\n /**\n * NH TMCP Bảo Việt\n */\n BaoViet_Bank = 970438,\n /**\n * NH số CAKE by VPBank - TMCP Việt Nam Thịnh Vượng\n */\n CAKE = 546034,\n /**\n * NH Thương mại TNHH MTV Xây dựng Việt Nam\n */\n CB_Bank = 970444,\n /**\n * NH TNHH MTV CIMB Việt Nam\n */\n CIMB_Bank = 422589,\n /**\n * NH Hợp tác xã Việt Nam\n */\n Coop_Bank = 970446,\n /**\n * NH TNHH MTV Phát triển Singapore - CN TP. Hồ Chí Minh\n */\n DBS_Bank = 796500,\n /**\n * NH TMCP Đông Á\n */\n DongA_Bank = 970406,\n /**\n * NH TMCP Xuất Nhập khẩu Việt Nam\n */\n Eximbank = 970431,\n /**\n * NH TMCP Dầu khí Toàn cầu\n */\n GPBank = 970408,\n /**\n * NH TMCP Phát triển TP. Hồ Chí Minh\n */\n HDBank = 970437,\n /**\n * NH TNHH MTV HSBC (Việt Nam)\n */\n HSBC = 458761,\n /**\n * NH TNHH MTV Hong Leong Việt Nam\n */\n HongLeong_Bank = 970442,\n /**\n * NH Công nghiệp Hàn Quốc - CN TP. Hồ Chí Minh\n */\n IBK_HCM = 970456,\n /**\n * NH Công nghiệp Hàn Quốc - CN Hà Nội\n */\n IBK_HN = 970455,\n /**\n * NH TNHH Indovina\n */\n Indovina_Bank = 970434,\n /**\n * NH Đại chúng TNHH Kasikornbank - CN TP. Hồ Chí Minh\n */\n KBank = 668888,\n /**\n * NH TMCP Kiên Long\n */\n KienlongBank = 970452,\n /**\n * NH Kookmin - CN TP. Hồ Chí Minh\n */\n Kookmin_Bank_HCM = 970463,\n /**\n * NH Kookmin - CN Hà Nội\n */\n Kookmin_Bank_HN = 970462,\n /**\n * NH TMCP Lộc Phát Việt Nam\n */\n LPBank = 970449,\n /**\n * NH TMCP Quân đội\n */\n MB_Bank = 970422,\n /**\n * NH TMCP Hàng Hải\n */\n MSB = 970426,\n /**\n * NH TMCP Quốc Dân\n */\n NCB = 970419,\n /**\n * NH TMCP Nam Á\n */\n Nam_A_Bank = 970428,\n /**\n * NH Nonghyup - CN Hà Nội\n */\n NongHyup_Bank = 801011,\n /**\n * NH TMCP Phương Đông\n */\n OCB = 970448,\n /**\n * NH Thương mại TNHH MTV Đại Dương\n */\n Ocean_Bank = 970414,\n /**\n * NH TMCP Thịnh vượng và Phát triển\n */\n PGBank = 970430,\n /**\n * NH TMCP Đại Chúng Việt Nam\n */\n PVcomBank = 970412,\n /**\n * NH TNHH MTV Public Việt Nam\n */\n Public_Bank_Vietnam = 970439,\n /**\n * NH TMCP Sài Gòn\n */\n SCB = 970429,\n /**\n * NH TMCP Sài Gòn - Hà Nội\n */\n SHB = 970443,\n /**\n * NH TMCP Sài Gòn Thương Tín\n */\n Sacombank = 970403,\n /**\n * NH TMCP Sài Gòn Công Thương\n */\n Saigon_Bank = 970400,\n /**\n * NH TMCP Đông Nam Á\n */\n SeABank = 970440,\n /**\n * NH TNHH MTV Shinhan Việt Nam\n */\n Shinhan_Bank = 970424,\n /**\n * NH TNHH MTV Standard Chartered Bank Việt Nam\n */\n Standard_Chartered_Vietnam = 970410,\n /**\n * NH số TNEX\n */\n TNEX = 9704261,\n /**\n * NH TMCP Tiên Phong\n */\n TPBank = 970423,\n /**\n * NH TMCP Kỹ thương Việt Nam\n */\n Techcombank = 970407,\n /**\n * NH số Timo by Bản Việt Bank\n */\n Timo = 963388,\n /**\n * NH số UBank by VPBank\n */\n UBank = 546035,\n /**\n * NH United Overseas Bank Việt Nam\n */\n United_Overseas_Bank_Vietnam = 970458,\n /**\n * NH TMCP Quốc tế Việt Nam\n */\n VIB = 970441,\n /**\n * NH TMCP Việt Nam Thịnh Vượng\n */\n VPBank = 970432,\n /**\n * NH Liên doanh Việt - Nga\n */\n VRB = 970421,\n /**\n * NH TMCP Việt Á\n */\n VietABank = 970427,\n /**\n * NH TMCP Việt Nam Thương Tín\n */\n VietBank = 970433,\n /**\n * NH TMCP Ngoại Thương Việt Nam\n */\n Vietcombank = 970436,\n /**\n * NH TMCP Công thương Việt Nam\n */\n VietinBank = 970415,\n /**\n * NH TNHH MTV Woori Việt Nam\n */\n Woori_Bank = 970457,\n}\n","import { ThreadType } from \"./Enum\";\n\nexport type TDeliveredMessage = {\n msgId: string;\n seen: number;\n deliveredUids: string[];\n seenUids: string[];\n realMsgId: string;\n mSTs: number;\n};\n\nexport type TGroupDeliveredMessage = TDeliveredMessage & {\n groupId: string;\n};\n\nexport class UserDeliveredMessage {\n type: ThreadType.User = ThreadType.User;\n\n data: TDeliveredMessage;\n threadId: string;\n isSelf: false;\n\n constructor(data: TDeliveredMessage) {\n this.data = data;\n this.threadId = data.deliveredUids[0];\n this.isSelf = false;\n }\n}\n\nexport class GroupDeliveredMessage {\n type: ThreadType.Group = ThreadType.Group;\n\n data: TGroupDeliveredMessage;\n threadId: string;\n isSelf: boolean;\n\n constructor(uid: string, data: TGroupDeliveredMessage) {\n this.data = data;\n this.threadId = data.groupId;\n this.isSelf = data.deliveredUids.includes(uid);\n }\n}\n\nexport type DeliveredMessage = UserDeliveredMessage | GroupDeliveredMessage;\n","export enum FriendEventType {\n ADD,\n REMOVE,\n\n REQUEST,\n UNDO_REQUEST,\n REJECT_REQUEST,\n\n SEEN_FRIEND_REQUEST,\n\n BLOCK,\n UNBLOCK,\n BLOCK_CALL,\n UNBLOCK_CALL,\n\n PIN_UNPIN,\n PIN_CREATE,\n\n UNKNOWN,\n}\n\nexport type TFriendEventBase = string;\n\nexport type TFriendEventRejectUndo = {\n toUid: string;\n fromUid: string;\n};\n\nexport type TFriendEventRequest = {\n toUid: string;\n fromUid: string;\n src: number;\n message: string;\n};\n\nexport type TFriendEventSeenRequest = string[];\n\nexport type TFriendEventPinCreateTopicParams = {\n senderUid: string;\n senderName: string;\n client_msg_id: string;\n global_msg_id: string;\n msg_type: number;\n title: string;\n};\n\nexport type TFriendEventPinTopic = {\n topicId: string;\n topicType: number;\n};\n\nexport type TFriendEventPinCreateTopic = {\n type: number;\n color: number;\n emoji: string;\n startTime: number;\n duration: number;\n params: TFriendEventPinCreateTopicParams;\n id: string;\n creatorId: string;\n createTime: number;\n editorId: string;\n editTime: number;\n repeat: number;\n action: number;\n};\n\nexport type TFriendEventPinCreate = {\n oldTopic?: TFriendEventPinTopic;\n topic: TFriendEventPinCreateTopic;\n actorId: string;\n oldVersion: number;\n version: number;\n conversationId: string;\n};\n\nexport type TFriendEventPinUnpin = {\n topic: TFriendEventPinTopic;\n actorId: string;\n oldVersion: number;\n version: number;\n conversationId: string;\n};\n\nexport type TFriendEvent =\n | TFriendEventBase\n | TFriendEventRequest\n | TFriendEventRejectUndo\n | TFriendEventSeenRequest\n | TFriendEventPinUnpin\n | TFriendEventPinCreate;\n\nexport type FriendEvent =\n | {\n type:\n | FriendEventType.ADD\n | FriendEventType.REMOVE\n | FriendEventType.BLOCK\n | FriendEventType.UNBLOCK\n | FriendEventType.BLOCK_CALL\n | FriendEventType.UNBLOCK_CALL;\n data: TFriendEventBase;\n threadId: string;\n isSelf: boolean;\n }\n | {\n type: FriendEventType.REJECT_REQUEST | FriendEventType.UNDO_REQUEST;\n data: TFriendEventRejectUndo;\n threadId: string;\n isSelf: boolean;\n }\n | {\n type: FriendEventType.REQUEST;\n data: TFriendEventRequest;\n threadId: string;\n isSelf: boolean;\n }\n | {\n type: FriendEventType.SEEN_FRIEND_REQUEST;\n data: TFriendEventSeenRequest;\n threadId: string;\n isSelf: boolean;\n }\n | {\n type: FriendEventType.PIN_CREATE;\n data: TFriendEventPinCreate;\n threadId: string;\n isSelf: boolean;\n }\n | {\n type: FriendEventType.PIN_UNPIN;\n data: TFriendEventPinUnpin;\n threadId: string;\n isSelf: boolean;\n }\n | {\n type: FriendEventType.UNKNOWN;\n data: string;\n threadId: string;\n isSelf: boolean;\n };\n\nexport function initializeFriendEvent(uid: string, data: TFriendEvent, type: FriendEventType): FriendEvent {\n if (\n type == FriendEventType.ADD ||\n type == FriendEventType.REMOVE ||\n type == FriendEventType.BLOCK ||\n type == FriendEventType.UNBLOCK ||\n type == FriendEventType.BLOCK_CALL ||\n type == FriendEventType.UNBLOCK_CALL\n ) {\n return {\n type,\n data: data as TFriendEventBase,\n threadId: data as string,\n isSelf: ![FriendEventType.ADD, FriendEventType.REMOVE].includes(type),\n };\n } else if (type == FriendEventType.REJECT_REQUEST || type == FriendEventType.UNDO_REQUEST) {\n const threadId = (data as TFriendEventRejectUndo).toUid;\n return {\n type,\n data: data as TFriendEventRejectUndo,\n threadId,\n isSelf: (data as TFriendEventRequest).fromUid == uid,\n };\n } else if (type == FriendEventType.REQUEST) {\n const threadId = (data as TFriendEventRequest).toUid;\n return {\n type,\n data: data as TFriendEventRequest,\n threadId,\n isSelf: (data as TFriendEventRequest).fromUid == uid,\n };\n } else if (type == FriendEventType.SEEN_FRIEND_REQUEST) {\n return {\n type,\n data: data as TFriendEventSeenRequest,\n threadId: uid,\n isSelf: true,\n };\n } else if (type == FriendEventType.PIN_CREATE) {\n const threadId = (data as TFriendEventPinCreate).conversationId;\n return {\n type,\n data: data as TFriendEventPinCreate,\n threadId,\n isSelf: (data as TFriendEventPinCreate).actorId == uid,\n };\n } else if (type == FriendEventType.PIN_UNPIN) {\n const threadId = (data as TFriendEventPinUnpin).conversationId;\n return {\n type,\n data: data as TFriendEventPinUnpin,\n threadId,\n isSelf: (data as TFriendEventPinUnpin).actorId == uid,\n };\n } else {\n return {\n type: FriendEventType.UNKNOWN,\n data: JSON.stringify(data),\n threadId: \"\",\n isSelf: false,\n };\n }\n}\n","export type GroupSetting = {\n blockName: number;\n signAdminMsg: number;\n addMemberOnly: number;\n setTopicOnly: number;\n enableMsgHistory: number;\n joinAppr: number;\n lockCreatePost: number;\n lockCreatePoll: number;\n lockSendMsg: number;\n lockViewMember: number;\n bannFeature: number;\n dirtyMedia: number;\n banDuration: number;\n};\n\nexport enum GroupTopicType {\n Note = 0,\n Message = 2,\n Poll = 3,\n}\n\nexport type GroupTopicNoteParams = {\n client_msg_id: string;\n global_msg_id: string;\n title: string;\n};\n\nexport type GroupTopicTextMessageParams = {\n senderUid: string;\n senderName: string;\n client_msg_id: string;\n global_msg_id: string;\n msg_type: 1;\n title: string;\n};\n\nexport type GroupTopicVoiceMessageParams = GroupTopicImageMessageParams & {\n msg_type: 31;\n};\n\nexport type GroupTopicImageMessageParams = GroupTopicTextMessageParams & {\n msg_type: 32;\n thumb: string;\n};\n\nexport type GroupTopicVideoMessageParams = GroupTopicTextMessageParams & {\n msg_type: 44;\n thumb: string;\n};\n\nexport type GroupTopicFileMessageParams = GroupTopicTextMessageParams & {\n msg_type: 46;\n extra: {\n fileSize: string;\n checksum: string;\n checksumSha: unknown;\n fileExt: string;\n fdata: string;\n fType: number;\n };\n};\n\nexport type GroupTopicGifMessageParams = GroupTopicTextMessageParams & {\n msg_type: 49;\n thumb: string;\n};\n\nexport type GroupTopicMessageParams =\n | GroupTopicTextMessageParams\n | GroupTopicVoiceMessageParams\n | GroupTopicImageMessageParams\n | GroupTopicVideoMessageParams\n | GroupTopicFileMessageParams\n | GroupTopicGifMessageParams;\n\nexport type GroupTopicPollParams = {\n pollId: number;\n title: string;\n};\n\nexport type GroupTopicOtherParams = {\n [key: string]: unknown;\n};\n\nexport type GroupTopic = {\n type: GroupTopicType;\n color: number;\n emoji: string;\n startTime: number;\n duration: number;\n params: GroupTopicNoteParams | GroupTopicMessageParams | GroupTopicPollParams | GroupTopicOtherParams;\n id: string;\n creatorId: string;\n createTime: number;\n editorId: string;\n editTime: number;\n repeat: number;\n action: number;\n};\n\nexport enum GroupType {\n Group = 1,\n Community = 2,\n}\n\nexport type GroupCurrentMem = {\n id: string;\n dName: string;\n zaloName: string;\n avatar: string;\n avatar_25: string;\n accountStatus: number;\n type: number;\n};\n\nexport type GroupInfo = {\n groupId: string;\n name: string;\n desc: string;\n type: GroupType;\n creatorId: string;\n version: string;\n avt: string;\n fullAvt: string;\n memberIds: string[];\n adminIds: string[];\n currentMems: GroupCurrentMem[];\n updateMems: unknown[];\n admins: unknown[];\n hasMoreMember: number;\n subType: number;\n totalMember: number;\n maxMember: number;\n setting: GroupSetting;\n createdTime: number;\n visibility: number;\n globalId: string;\n /**\n * 1: True, 0: False\n */\n e2ee: number;\n extraInfo: {\n enable_media_store: number;\n };\n};\n","import type { GroupSetting, GroupTopic } from \"./Group\";\nimport type { ReminderGroup } from \"./Reminder\";\n\nexport enum GroupEventType {\n JOIN_REQUEST = \"join_request\",\n JOIN = \"join\",\n LEAVE = \"leave\",\n REMOVE_MEMBER = \"remove_member\",\n BLOCK_MEMBER = \"block_member\",\n\n UPDATE_SETTING = \"update_setting\",\n UPDATE = \"update\",\n NEW_LINK = \"new_link\",\n\n ADD_ADMIN = \"add_admin\",\n REMOVE_ADMIN = \"remove_admin\",\n\n NEW_PIN_TOPIC = \"new_pin_topic\",\n UPDATE_PIN_TOPIC = \"update_pin_topic\",\n REORDER_PIN_TOPIC = \"reorder_pin_topic\",\n\n UPDATE_BOARD = \"update_board\",\n REMOVE_BOARD = \"remove_board\",\n\n UPDATE_TOPIC = \"update_topic\",\n UNPIN_TOPIC = \"unpin_topic\",\n REMOVE_TOPIC = \"remove_topic\",\n\n ACCEPT_REMIND = \"accept_remind\",\n REJECT_REMIND = \"reject_remind\",\n REMIND_TOPIC = \"remind_topic\",\n\n UPDATE_AVATAR = \"update_avatar\",\n\n UNKNOWN = \"unknown\",\n}\n\nexport type GroupEventUpdateMember = {\n id: string;\n dName: string;\n avatar: string;\n type: number;\n avatar_25: string;\n};\n\nexport type GroupEventGroupInfo = {\n group_link?: string;\n link_expired_time?: number;\n [key: string]: unknown;\n};\n\nexport type GroupEventExtraData = {\n featureId?: number;\n field?: string;\n [key: string]: unknown;\n};\n\nexport type TGroupEventBase = {\n subType: number;\n groupId: string;\n creatorId: string;\n groupName: string;\n sourceId: string;\n updateMembers: GroupEventUpdateMember[];\n groupSetting: GroupSetting | null;\n groupTopic: GroupTopic | null;\n info: GroupEventGroupInfo | null;\n extraData: GroupEventExtraData | null;\n time: string;\n avt: string | null;\n fullAvt: string | null;\n isAdd: number;\n hideGroupInfo: number;\n version: string;\n groupType: number;\n clientId?: number;\n errorMap?: Record<string, unknown>;\n e2ee?: number;\n};\n\nexport type TGroupEventJoinRequest = {\n uids: string[];\n totalPending: number;\n groupId: string;\n time: string;\n};\n\nexport type TGroupEventPinTopic = {\n oldBoardVersion: number;\n boardVersion: number;\n topic: GroupTopic;\n actorId: string;\n groupId: string;\n};\n\nexport type TGroupEventReorderPinTopic = {\n oldBoardVersion: number;\n actorId: string;\n topics: {\n topicId: string;\n topicType: number;\n }[];\n groupId: string;\n boardVersion: number;\n topic: null;\n};\n\nexport type TGroupEventBoard = {\n sourceId: string;\n groupName: string;\n groupTopic: (GroupTopic | ReminderGroup) & { params: string };\n groupId: string;\n creatorId: string;\n\n subType?: number;\n updateMembers?: GroupEventUpdateMember[];\n groupSetting?: GroupSetting;\n info?: GroupEventGroupInfo;\n extraData?: GroupEventExtraData;\n time?: string;\n avt?: null;\n fullAvt?: null;\n isAdd?: number;\n hideGroupInfo?: number;\n version?: string;\n groupType?: number;\n};\n\nexport type TGroupEventRemindRespond = {\n topicId: string;\n updateMembers: string[];\n groupId: string;\n time: string;\n};\n\nexport type TGroupEventRemindTopic = {\n msg: string;\n editorId: string;\n color: string;\n emoji: string;\n creatorId: string;\n editTime: number;\n type: number;\n duration: number;\n group_id: string;\n createTime: number;\n repeat: number;\n startTime: number;\n time: number;\n remindType: number;\n};\n\nexport type TGroupEvent =\n | TGroupEventBase\n | TGroupEventJoinRequest\n | TGroupEventPinTopic\n | TGroupEventReorderPinTopic\n | TGroupEventBoard\n | TGroupEventRemindRespond\n | TGroupEventRemindTopic;\n\nexport type GroupEvent =\n | {\n type: GroupEventType.JOIN_REQUEST;\n data: TGroupEventJoinRequest;\n act: string;\n threadId: string;\n isSelf: boolean;\n }\n | {\n type: GroupEventType.NEW_PIN_TOPIC | GroupEventType.UNPIN_TOPIC | GroupEventType.UPDATE_PIN_TOPIC;\n data: TGroupEventPinTopic;\n act: string;\n threadId: string;\n isSelf: boolean;\n }\n | {\n type: GroupEventType.REORDER_PIN_TOPIC;\n data: TGroupEventReorderPinTopic;\n act: string;\n threadId: string;\n isSelf: boolean;\n }\n | {\n type: GroupEventType.UPDATE_BOARD | GroupEventType.REMOVE_BOARD;\n data: TGroupEventBoard;\n act: string;\n threadId: string;\n isSelf: boolean;\n }\n | {\n type: GroupEventType.ACCEPT_REMIND | GroupEventType.REJECT_REMIND;\n data: TGroupEventRemindRespond;\n act: string;\n threadId: string;\n isSelf: boolean;\n }\n | {\n type: GroupEventType.REMIND_TOPIC;\n data: TGroupEventRemindTopic;\n act: string;\n threadId: string;\n isSelf: boolean;\n }\n | {\n type: Exclude<\n GroupEventType,\n | GroupEventType.JOIN_REQUEST\n | GroupEventType.NEW_PIN_TOPIC\n | GroupEventType.UNPIN_TOPIC\n | GroupEventType.UPDATE_PIN_TOPIC\n | GroupEventType.REORDER_PIN_TOPIC\n | GroupEventType.UPDATE_BOARD\n | GroupEventType.REMOVE_BOARD\n | GroupEventType.ACCEPT_REMIND\n | GroupEventType.REJECT_REMIND\n | GroupEventType.REMIND_TOPIC\n >;\n data: TGroupEventBase;\n act: string;\n threadId: string;\n isSelf: boolean;\n };\n\nexport function initializeGroupEvent(uid: string, data: TGroupEvent, type: GroupEventType, act: string): GroupEvent {\n const threadId = \"group_id\" in data ? data.group_id : data.groupId;\n\n if (type == GroupEventType.JOIN_REQUEST) {\n return { type, act, data: data as TGroupEventJoinRequest, threadId, isSelf: false };\n } else if (\n type == GroupEventType.NEW_PIN_TOPIC ||\n type == GroupEventType.UNPIN_TOPIC ||\n type == GroupEventType.UPDATE_PIN_TOPIC\n ) {\n return {\n type,\n act,\n data: data as TGroupEventPinTopic,\n threadId,\n isSelf: (data as TGroupEventPinTopic).actorId == uid,\n };\n } else if (type == GroupEventType.REORDER_PIN_TOPIC) {\n return {\n type,\n act,\n data: data as TGroupEventReorderPinTopic,\n threadId,\n isSelf: (data as TGroupEventPinTopic).actorId == uid,\n };\n } else if (type == GroupEventType.UPDATE_BOARD || type == GroupEventType.REMOVE_BOARD) {\n return {\n type,\n act,\n data: data as TGroupEventBoard,\n threadId,\n isSelf: (data as TGroupEventBoard).sourceId == uid,\n };\n } else if (type == GroupEventType.ACCEPT_REMIND || type == GroupEventType.REJECT_REMIND) {\n return {\n type,\n act,\n data: data as TGroupEventRemindRespond,\n threadId,\n isSelf: (data as TGroupEventRemindRespond).updateMembers.some((memberId) => memberId == uid),\n };\n } else if (type == GroupEventType.REMIND_TOPIC) {\n return {\n type,\n act,\n data: data as TGroupEventRemindTopic,\n threadId,\n isSelf: (data as TGroupEventRemindTopic).creatorId == uid,\n };\n } else {\n const baseData = data as TGroupEventBase;\n\n return {\n type,\n act,\n data: baseData,\n threadId,\n isSelf: baseData.updateMembers?.some((member) => member.id == uid) || baseData.sourceId == uid,\n };\n }\n}\n","import { ThreadType } from \"./Enum\";\n\nexport type TAttachmentContent = {\n title: string;\n description: string;\n href: string;\n thumb: string;\n childnumber: number;\n action: string;\n params: string;\n type: string;\n};\n\nexport type TOtherContent = {\n [key: string]: unknown;\n};\n\nexport type TMessage = {\n actionId: string;\n msgId: string;\n cliMsgId: string;\n msgType: string;\n uidFrom: string;\n idTo: string;\n dName: string;\n ts: string;\n status: number;\n content: string | TAttachmentContent | TOtherContent;\n notify: string;\n ttl: number;\n userId: string;\n uin: string;\n topOut: string;\n topOutTimeOut: string;\n topOutImprTimeOut: string;\n propertyExt:\n | {\n color: number;\n size: number;\n type: number;\n subType: number;\n ext: string;\n }\n | undefined;\n paramsExt: {\n countUnread: number;\n containType: number;\n platformType: number;\n };\n cmd: number;\n st: number;\n at: number;\n realMsgId: string;\n quote: TQuote | undefined;\n};\n\nexport type TGroupMessage = TMessage & {\n mentions: TMention[] | undefined;\n};\n\nexport type TQuote = {\n ownerId: string;\n cliMsgId: number;\n globalMsgId: number;\n cliMsgType: number;\n ts: number;\n msg: string;\n attach: string;\n fromD: string;\n ttl: number;\n};\n\nexport type TMention = {\n uid: string;\n pos: number;\n len: number;\n type: 0 | 1;\n};\n\nexport class UserMessage {\n type: ThreadType.User = ThreadType.User;\n\n data: TMessage;\n threadId: string;\n /**\n * true if the message is sent by the logged in account\n */\n isSelf: boolean;\n\n constructor(uid: string, data: TMessage) {\n this.data = data;\n this.threadId = data.uidFrom == \"0\" ? data.idTo : data.uidFrom;\n this.isSelf = data.uidFrom == \"0\";\n\n if (data.idTo == \"0\") data.idTo = uid;\n if (data.uidFrom == \"0\") data.uidFrom = uid;\n if (data.quote) {\n data.quote.ownerId = String(data.quote.ownerId);\n }\n }\n}\n\nexport class GroupMessage {\n type: ThreadType.Group = ThreadType.Group;\n\n data: TGroupMessage;\n threadId: string;\n /**\n * true if the message is sent by the logged in account\n */\n isSelf: boolean;\n\n constructor(uid: string, data: TGroupMessage) {\n this.data = data;\n this.threadId = data.idTo;\n this.isSelf = data.uidFrom == \"0\";\n\n if (data.uidFrom == \"0\") data.uidFrom = uid;\n if (data.quote) {\n data.quote.ownerId = String(data.quote.ownerId);\n }\n }\n}\n\nexport type Message = UserMessage | GroupMessage;\n","export enum Reactions {\n HEART = \"/-heart\",\n LIKE = \"/-strong\",\n HAHA = \":>\",\n WOW = \":o\",\n CRY = \":-((\",\n ANGRY = \":-h\",\n KISS = \":-*\",\n TEARS_OF_JOY = \":')\",\n SHIT = \"/-shit\",\n ROSE = \"/-rose\",\n BROKEN_HEART = \"/-break\",\n DISLIKE = \"/-weak\",\n LOVE = \";xx\",\n CONFUSED = \";-/\",\n WINK = \";-)\",\n FADE = \"/-fade\",\n SUN = \"/-li\",\n BIRTHDAY = \"/-bd\",\n BOMB = \"/-bome\",\n OK = \"/-ok\",\n PEACE = \"/-v\",\n THANKS = \"/-thanks\",\n PUNCH = \"/-punch\",\n SHARE = \"/-share\",\n PRAY = \"_()_\",\n NO = \"/-no\",\n BAD = \"/-bad\",\n LOVE_YOU = \"/-loveu\",\n SAD = \"--b\",\n VERY_SAD = \":((\",\n COOL = \"x-)\",\n NERD = \"8-)\",\n BIG_SMILE = \";-d\",\n SUNGLASSES = \"b-)\",\n NEUTRAL = \":--|\",\n SAD_FACE = \"p-(\",\n BYE = \":-bye\",\n SLEEPY = \"|-)\",\n WIPE = \":wipe\",\n DIG = \":-dig\",\n ANGUISH = \"&-(\",\n HANDCLAP = \":handclap\",\n ANGRY_FACE = \">-|\",\n F_CHAIR = \":-f\",\n L_CHAIR = \":-l\",\n R_CHAIR = \":-r\",\n SILENT = \";-x\",\n SURPRISE = \":-o\",\n EMBARRASSED = \";-s\",\n AFRAID = \";-a\",\n SAD2 = \":-<\",\n BIG_LAUGH = \":))\",\n RICH = \"$-)\",\n BEER = \"/-beer\",\n NONE = \"\", // more...\n}\n\nexport type TReaction = {\n actionId: string;\n msgId: string;\n cliMsgId: string;\n msgType: string;\n uidFrom: string;\n idTo: string;\n dName?: string;\n content: {\n rMsg: { gMsgID: string; cMsgID: string; msgType: number }[];\n rIcon: Reactions;\n rType: number;\n source: number;\n };\n ts: string;\n ttl: number;\n};\n\nexport class Reaction {\n data: TReaction;\n threadId: string;\n isSelf: boolean;\n isGroup: boolean;\n\n constructor(uid: string, data: TReaction, isGroup: boolean) {\n this.data = data;\n this.threadId = isGroup || data.uidFrom == \"0\" ? data.idTo : data.uidFrom;\n this.isSelf = data.uidFrom == \"0\";\n this.isGroup = isGroup;\n\n if (data.idTo == \"0\") data.idTo = uid;\n if (data.uidFrom == \"0\") data.uidFrom = uid;\n }\n}\n","export enum ReminderRepeatMode {\n None = 0,\n Daily = 1,\n Weekly = 2,\n Monthly = 3,\n}\n\nexport type ReminderUser = {\n creatorUid: string;\n toUid: string;\n emoji: string;\n color: number;\n reminderId: string;\n createTime: number;\n repeat: ReminderRepeatMode;\n startTime: number;\n editTime: number;\n endTime: number;\n params: {\n title: string;\n setTitle: boolean;\n };\n type: number;\n};\n\nexport type ReminderGroup = {\n editorId: string;\n emoji: string;\n color: number;\n groupId: string;\n creatorId: string;\n editTime: number;\n eventType: number;\n responseMem: {\n rejectMember: number;\n myResp: number;\n acceptMember: number;\n };\n params: {\n title: string;\n setTitle?: boolean;\n };\n type: number;\n duration: number;\n repeatInfo: {\n list_ts: unknown[];\n } | null;\n repeatData: unknown[];\n createTime: number;\n repeat: ReminderRepeatMode;\n startTime: number;\n id: string;\n};\n","import { ThreadType } from \"./Enum\";\n\nexport type TUserSeenMessage = {\n idTo: string;\n msgId: string;\n realMsgId: string;\n};\n\nexport type TGroupSeenMessage = {\n msgId: string;\n groupId: string;\n seenUids: string[];\n};\n\nexport class UserSeenMessage {\n type: ThreadType.User = ThreadType.User;\n\n data: TUserSeenMessage;\n threadId: string;\n isSelf: false;\n\n constructor(data: TUserSeenMessage) {\n this.data = data;\n this.threadId = data.idTo;\n this.isSelf = false;\n }\n}\n\nexport class GroupSeenMessage {\n type: ThreadType.Group = ThreadType.Group;\n\n data: TGroupSeenMessage;\n threadId: string;\n isSelf: boolean;\n\n constructor(uid: string, data: TGroupSeenMessage) {\n this.data = data;\n this.threadId = data.groupId;\n this.isSelf = data.seenUids.includes(uid);\n }\n}\n\nexport type SeenMessage = UserSeenMessage | GroupSeenMessage;\n","import { ThreadType } from \"./Enum\";\n\nexport type TTyping = {\n uid: string;\n ts: string;\n isPC: 0 | 1;\n};\n\nexport type TGroupTyping = TTyping & {\n gid: string;\n};\n\nexport class UserTyping {\n type: ThreadType.User = ThreadType.User;\n\n data: TTyping;\n threadId: string;\n isSelf: false;\n\n constructor(data: TTyping) {\n this.data = data;\n this.threadId = data.uid;\n this.isSelf = false;\n }\n}\n\nexport class GroupTyping {\n type: ThreadType.Group = ThreadType.Group;\n\n data: TGroupTyping;\n threadId: string;\n isSelf: false;\n\n constructor(data: TGroupTyping) {\n this.data = data;\n this.threadId = data.gid;\n this.isSelf = false;\n }\n}\n\nexport type Typing = UserTyping | GroupTyping;\n","export type TUndoContent = {\n globalMsgId: number;\n cliMsgId: number;\n deleteMsg: number;\n srcId: number;\n destId: number;\n};\n\nexport type TUndo = {\n actionId: string;\n msgId: string;\n cliMsgId: string;\n msgType: string;\n uidFrom: string;\n idTo: string;\n dName: string;\n ts: string;\n status: number;\n content: TUndoContent;\n notify: string;\n ttl: number;\n userId: string;\n uin: string;\n cmd: number;\n st: number;\n at: number;\n realMsgId: string;\n};\n\nexport class Undo {\n data: TUndo;\n threadId: string;\n isSelf: boolean;\n isGroup: boolean;\n\n constructor(uid: string, data: TUndo, isGroup: boolean) {\n this.data = data;\n this.threadId = isGroup || data.uidFrom == \"0\" ? data.idTo : data.uidFrom;\n this.isSelf = data.uidFrom == \"0\";\n this.isGroup = isGroup;\n\n if (data.idTo == \"0\") data.idTo = uid;\n if (data.uidFrom == \"0\") data.uidFrom = uid;\n }\n}\n","export type ZBusinessPackage = {\n label?: Record<string, string> | null;\n pkgId: number; // @TODO: what is this?\n};\n\nexport enum BusinessCategory {\n Other = 0,\n RealEstate = 1,\n TechnologyAndDevices = 2,\n TravelAndHospitality = 3,\n EducationAndTraining = 4,\n ShoppingAndRetail = 5,\n CosmeticsAndBeauty = 6,\n RestaurantAndCafe = 7,\n AutoAndMotorbike = 8,\n FashionAndApparel = 9,\n FoodAndBeverage = 10,\n MediaAndEntertainment = 11,\n InternalCommunications = 12,\n Transportation = 13,\n Telecommunications = 14,\n}\n\nexport const BusinessCategoryName: Record<BusinessCategory, string> = {\n [BusinessCategory.Other]: \"Dịch vụ khác (Không hiển thị)\",\n [BusinessCategory.RealEstate]: \"Bất động sản\",\n [BusinessCategory.TechnologyAndDevices]: \"Công nghệ & Thiết bị\",\n [BusinessCategory.TravelAndHospitality]: \"Du lịch & Lưu trú\",\n [BusinessCategory.EducationAndTraining]: \"Giáo dục & Đào tạo\",\n [BusinessCategory.ShoppingAndRetail]: \"Mua sắm & Bán lẻ\",\n [BusinessCategory.CosmeticsAndBeauty]: \"Mỹ phẩm & Làm đẹp\",\n [BusinessCategory.RestaurantAndCafe]: \"Nhà hàng & Quán\",\n [BusinessCategory.AutoAndMotorbike]: \"Ô tô & Xe máy\",\n [BusinessCategory.FashionAndApparel]: \"Thời trang & May mặc\",\n [BusinessCategory.FoodAndBeverage]: \"Thực phẩm & Đồ uống\",\n [BusinessCategory.MediaAndEntertainment]: \"Truyền thông & Giải trí\",\n [BusinessCategory.InternalCommunications]: \"Truyền thông nội bộ\",\n [BusinessCategory.Transportation]: \"Vận tải\",\n [BusinessCategory.Telecommunications]: \"Viễn thông\",\n};\n","import type { Agent } from \"http\";\nimport type { CookieJar } from \"tough-cookie\";\n\ntype UploadEventData = {\n fileUrl: string;\n fileId: string;\n};\n\nexport type UploadCallback = (data: UploadEventData) => unknown;\n\ntype ShareFileSettings = {\n big_file_domain_list: string[];\n max_size_share_file_v2: number;\n max_size_share_file_v3: number;\n file_upload_show_icon_1GB: boolean;\n restricted_ext: string;\n next_file_time: number;\n max_file: number;\n max_size_photo: number;\n max_size_share_file: number;\n max_size_resize_photo: number;\n max_size_gif: number;\n max_size_original_photo: number;\n chunk_size_file: number;\n restricted_ext_file: string[];\n};\n\ntype SocketSettings = {\n rotate_error_codes: number[];\n retries: {\n [key: string]: {\n max?: number;\n times: number[] | number;\n };\n };\n debug: {\n enable: boolean;\n };\n ping_interval: number;\n reset_endpoint: number;\n queue_ctrl_actionid_map: {\n \"611_0\": string;\n \"610_1\": string;\n \"610_0\": string;\n \"603_0\": string;\n \"611_1\": string;\n };\n close_and_retry_codes: number[];\n max_msg_size: number;\n enable_ctrl_socket: boolean;\n reconnect_after_fallback: boolean;\n enable_chat_socket: boolean;\n submit_wss_log: boolean;\n disable_lp: boolean;\n offline_monitor: {\n enable: boolean;\n };\n};\n\ntype LoginInfo = {\n // eslint-disable-next-line\n [key: string]: any;\n haspcclient: number;\n public_ip: string;\n language: string;\n send2me_id: string;\n zpw_service_map_v3: {\n other_contact: string[];\n chat_e2e: string[];\n workspace: string[];\n catalog: string[];\n boards: string[];\n downloadStickerUrl: string[];\n sp_contact: string[];\n zcloud_up_file: string[];\n media_store_send2me: string[];\n push_act: string[];\n aext: string[];\n zfamily: string[];\n group_poll: string[];\n group_cloud_message: string[];\n media_store: string[];\n file: string[];\n auto_reply: string[];\n sync_action: string[];\n friendLan: string[];\n friend: string[];\n alias: string[];\n zimsg: string[];\n group_board: string[];\n conversation: string[];\n group: string[];\n fallback_LP: string[];\n friend_board: string[];\n up_file: string[];\n zavi: string[];\n reaction: string[];\n voice_call: string[];\n profile: string[];\n sticker: string[];\n label: string[];\n consent: string[];\n zcloud: string[];\n chat: string[];\n todoUrl: string[];\n recent_search: string[];\n group_e2e: string[];\n quick_message: string[];\n };\n};\n\ntype ExtraVer = {\n phonebook: number;\n conv_label: string;\n friend: string;\n ver_sticker_giphy_suggest: number;\n ver_giphy_cate: number;\n alias: string;\n ver_sticker_cate_list: number;\n block_friend: string;\n};\n\nexport type ZPWServiceMap = LoginInfo[\"zpw_service_map_v3\"];\n\nexport type AppContextBase = {\n uid: string;\n imei: string;\n cookie: CookieJar;\n userAgent: string;\n language: string;\n secretKey: string | null;\n zpwServiceMap: ZPWServiceMap;\n settings: {\n // eslint-disable-next-line\n [key: string]: any;\n features: {\n // eslint-disable-next-line\n [key: string]: any;\n sharefile: ShareFileSettings;\n socket: SocketSettings;\n };\n keepalive: {\n alway_keepalive: number;\n keepalive_duration: number;\n time_deactive: number;\n };\n };\n loginInfo: LoginInfo;\n extraVer: ExtraVer;\n};\n\nexport type ImageMetadataGetterResponse = { width: number; height: number; size: number } | null;\nexport type ImageMetadataGetter = (filePath: string) => Promise<ImageMetadataGetterResponse>;\n\nexport type Options = {\n selfListen: boolean;\n checkUpdate: boolean;\n logging: boolean;\n\n apiType: number;\n apiVersion: number;\n\n agent?: Agent;\n\n /**\n * Optional fetch implementation for polyfills in non-standard environments.\n * If using proxy, `node-fetch` is highly recommended.\n */\n polyfill: typeof fetch;\n\n imageMetadataGetter?: ImageMetadataGetter;\n};\n\nconst _5_MINUTES = 5 * 60 * 1000;\nclass CallbacksMap extends Map<string, UploadCallback> {\n /**\n * @param ttl Time to live in milliseconds. Default is 5 minutes.\n */\n set(key: string, value: UploadCallback, ttl: number = _5_MINUTES): this {\n setTimeout(() => {\n this.delete(key);\n }, ttl);\n return super.set(key, value);\n }\n}\n\nexport type AppContextExtended = {\n uploadCallbacks: CallbacksMap;\n options: Options;\n readonly API_TYPE: number;\n readonly API_VERSION: number;\n};\n\nexport type ContextBase = Partial<AppContextBase> & AppContextExtended;\n\nexport const createContext = (apiType = 30, apiVersion = 665) =>\n ({\n API_TYPE: apiType,\n API_VERSION: apiVersion,\n uploadCallbacks: new CallbacksMap(),\n options: {\n selfListen: false,\n checkUpdate: true,\n logging: true,\n polyfill: global.fetch,\n },\n secretKey: null,\n }) as ContextBase;\n\nexport type ContextSession = AppContextBase & AppContextExtended & { secretKey: string };\n\nexport function isContextSession(ctx: ContextBase): ctx is ContextSession {\n return !!ctx.secretKey;\n}\n\nexport const MAX_MESSAGES_PER_SEND = 50;\n","import cryptojs from \"crypto-js\";\nimport crypto from \"node:crypto\";\nimport fs from \"node:fs\";\nimport path from \"node:path\";\nimport pako from \"pako\";\nimport SparkMD5 from \"spark-md5\";\nimport toughCookie from \"tough-cookie\";\nimport JSONBig from \"json-bigint\";\n\nimport { isContextSession, type ContextSession, type ContextBase } from \"./context\";\nimport { ZaloApiError, ZaloApiMissingImageMetadataGetter } from \"./Errors/index\";\nimport { FriendEventType } from \"./models/FriendEvent\";\nimport { GroupEventType } from \"./models/GroupEvent\";\nimport type { API } from \"./zalo\";\nimport type { AttachmentSource } from \"./models/Attachment\";\n\nexport const isBun = false;\n\nexport function hasOwn(obj: Record<string, unknown>, key: string): key is keyof typeof obj {\n return Object.prototype.hasOwnProperty.call(obj, key);\n}\n\n/**\n * Get signed key for API requests.\n *\n * @param type\n * @param params\n * @returns MD5 hash\n *\n */\nexport function getSignKey(type: string, params: Record<string, unknown>) {\n const n = [];\n for (const s in params) {\n if (hasOwn(params, s)) {\n n.push(s);\n }\n }\n\n n.sort();\n let a = \"zsecure\" + type;\n for (let s = 0; s < n.length; s++) a += params[n[s]];\n return cryptojs.MD5(a).toString();\n}\n\n/**\n *\n * @param baseURL\n * @param params\n * @param apiVersion automatically add zalo api version to url params\n * @returns\n *\n */\nexport function makeURL(\n ctx: ContextBase,\n baseURL: string,\n params: Record<string, string | number> = {},\n apiVersion: boolean = true,\n) {\n const url = new URL(baseURL);\n for (const key in params) {\n if (hasOwn(params, key)) {\n url.searchParams.append(key, params[key].toString());\n }\n }\n\n if (apiVersion) {\n if (!url.searchParams.has(\"zpw_ver\")) url.searchParams.set(\"zpw_ver\", ctx.API_VERSION.toString());\n if (!url.searchParams.has(\"zpw_type\")) url.searchParams.set(\"zpw_type\", ctx.API_TYPE.toString());\n }\n\n return url.toString();\n}\n\nexport class ParamsEncryptor {\n private zcid: string | null = null;\n private enc_ver: string;\n private zcid_ext: string;\n private encryptKey: string | null;\n constructor({ type, imei, firstLaunchTime }: { type: number; imei: string; firstLaunchTime: number }) {\n this.enc_ver = \"v2\";\n this.zcid = null;\n this.encryptKey = null;\n\n this.createZcid(type, imei, firstLaunchTime);\n this.zcid_ext = ParamsEncryptor.randomString();\n this.createEncryptKey();\n }\n\n getEncryptKey() {\n if (!this.encryptKey) throw new ZaloApiError(\"getEncryptKey: didn't create encryptKey yet\");\n return this.encryptKey;\n }\n\n createZcid(type: number, imei: string, firstLaunchTime: number) {\n if (!type || !imei || !firstLaunchTime) throw new ZaloApiError(\"createZcid: missing params\");\n const msg = `${type},${imei},${firstLaunchTime}`;\n const s = ParamsEncryptor.encodeAES(\"3FC4F0D2AB50057BCE0D90D9187A22B1\", msg, \"hex\", true);\n this.zcid = s;\n }\n\n createEncryptKey(e = 0) {\n const t = (e: string, t: string) => {\n const { even: n } = ParamsEncryptor.processStr(e),\n { even: a, odd: s } = ParamsEncryptor.processStr(t);\n if (!n || !a || !s) return !1;\n const i = n.slice(0, 8).join(\"\") + a.slice(0, 12).join(\"\") + s.reverse().slice(0, 12).join(\"\");\n return (this.encryptKey = i), !0;\n };\n if (!this.zcid || !this.zcid_ext) throw new ZaloApiError(\"createEncryptKey: zcid or zcid_ext is null\");\n try {\n const n = cryptojs.MD5(this.zcid_ext).toString().toUpperCase();\n if (t(n, this.zcid) || !(e < 3)) return !1;\n this.createEncryptKey(e + 1);\n } catch {\n if (e < 3) this.createEncryptKey(e + 1);\n }\n return !0;\n }\n\n getParams() {\n return this.zcid\n ? {\n zcid: this.zcid,\n zcid_ext: this.zcid_ext,\n enc_ver: this.enc_ver,\n }\n : null;\n }\n\n static processStr(e: string) {\n if (!e || \"string\" != typeof e)\n return {\n even: null,\n odd: null,\n };\n const [t, n] = [...e].reduce((e, t, n) => (e[n % 2].push(t), e), [[], []] as string[][]);\n return {\n even: t,\n odd: n,\n };\n }\n\n static randomString(e?: number, t?: number) {\n const n = e || 6,\n a = t && e && t > e ? t : 12;\n let s = Math.floor(Math.random() * (a - n + 1)) + n;\n if (s > 12) {\n let e = \"\";\n for (; s > 0; ) {\n e += Math.random()\n .toString(16)\n .substr(2, s > 12 ? 12 : s);\n s -= 12;\n }\n return e;\n }\n return Math.random().toString(16).substr(2, s);\n }\n\n static encodeAES(e: string, message: string, type: \"hex\" | \"base64\", uppercase: boolean, s = 0): string | null {\n if (!message) return null;\n try {\n {\n const encoder = \"hex\" == type ? cryptojs.enc.Hex : cryptojs.enc.Base64;\n const key = cryptojs.enc.Utf8.parse(e);\n\n const cfg = {\n words: [0, 0, 0, 0],\n sigBytes: 16,\n } as cryptojs.lib.WordArray;\n const encrypted = cryptojs.AES.encrypt(message, key, {\n iv: cfg,\n mode: cryptojs.mode.CBC,\n padding: cryptojs.pad.Pkcs7,\n }).ciphertext.toString(encoder);\n\n return uppercase ? encrypted.toUpperCase() : encrypted;\n }\n } catch {\n return s < 3 ? ParamsEncryptor.encodeAES(e, message, type, uppercase, s + 1) : null;\n }\n }\n}\n\nexport function decryptResp(key: string, data: string): Record<string, unknown> | null | string {\n let n = null;\n try {\n n = decodeRespAES(key, data);\n const parsed = JSON.parse(n);\n return parsed;\n } catch {\n return n;\n }\n}\n\nfunction decodeRespAES(key: string, data: string) {\n data = decodeURIComponent(data);\n const parsedKey = cryptojs.enc.Utf8.parse(key);\n const n = {\n words: [0, 0, 0, 0],\n sigBytes: 16,\n } as cryptojs.lib.WordArray;\n\n return cryptojs.AES.decrypt(\n {\n ciphertext: cryptojs.enc.Base64.parse(data),\n } as cryptojs.lib.CipherParams,\n parsedKey,\n {\n iv: n,\n mode: cryptojs.mode.CBC,\n padding: cryptojs.pad.Pkcs7,\n },\n ).toString(cryptojs.enc.Utf8);\n}\n\nexport function decodeBase64ToBuffer(data: string) {\n return Buffer.from(data, \"base64\");\n}\n\nexport function decodeUnit8Array(data: Uint8Array) {\n try {\n return new TextDecoder().decode(data);\n } catch {\n return null;\n }\n}\n\nexport function encodeAES(secretKey: string, data: cryptojs.lib.WordArray | string, t = 0): string | null {\n try {\n const key = cryptojs.enc.Base64.parse(secretKey);\n return cryptojs.AES.encrypt(data, key, {\n iv: cryptojs.enc.Hex.parse(\"00000000000000000000000000000000\"),\n mode: cryptojs.mode.CBC,\n padding: cryptojs.pad.Pkcs7,\n }).ciphertext.toString(cryptojs.enc.Base64);\n } catch {\n return t < 3 ? encodeAES(secretKey, data, t + 1) : null;\n }\n}\n\nexport function decodeAES(secretKey: string, data: string, t = 0): string | null {\n try {\n data = decodeURIComponent(data);\n const key = cryptojs.enc.Base64.parse(secretKey);\n return cryptojs.AES.decrypt(\n {\n ciphertext: cryptojs.enc.Base64.parse(data),\n } as cryptojs.lib.CipherParams,\n key,\n {\n iv: cryptojs.enc.Hex.parse(\"00000000000000000000000000000000\"),\n mode: cryptojs.mode.CBC,\n padding: cryptojs.pad.Pkcs7,\n },\n ).toString(cryptojs.enc.Utf8);\n } catch {\n return t < 3 ? decodeAES(secretKey, data, t + 1) : null;\n }\n}\n\nexport async function getDefaultHeaders(ctx: ContextBase, origin: string = \"https://chat.zalo.me\") {\n if (!ctx.cookie) throw new ZaloApiError(\"Cookie is not available\");\n if (!ctx.userAgent) throw new ZaloApiError(\"User agent is not available\");\n\n return {\n Accept: \"application/json, text/plain, */*\",\n \"Accept-Encoding\": \"gzip, deflate, br, zstd\",\n \"Accept-Language\": \"en-US,en;q=0.9\",\n \"content-type\": \"application/x-www-form-urlencoded\",\n Cookie: await ctx.cookie.getCookieString(origin),\n Origin: \"https://chat.zalo.me\",\n Referer: \"https://chat.zalo.me/\",\n \"User-Agent\": ctx.userAgent,\n };\n}\n\nexport async function request(ctx: ContextBase, url: string, options?: RequestInit, raw = false) {\n if (!ctx.cookie) ctx.cookie = new toughCookie.CookieJar();\n const origin = new URL(url).origin;\n\n const defaultHeaders = await getDefaultHeaders(ctx, origin);\n if (!raw) {\n if (options) {\n options.headers = Object.assign(defaultHeaders, options.headers || {});\n } else options = { headers: defaultHeaders };\n }\n\n const _options = {\n ...(options ?? {}),\n ...(isBun ? { \n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n proxy: ctx.options.agent?.proxy?.href\n } : { agent: ctx.options.agent }),\n };\n\n const response = await ctx.options.polyfill(url, _options);\n const setCookieRaw = response.headers.get(\"set-cookie\");\n if (setCookieRaw && !raw) {\n const splitCookies = setCookieRaw.split(\", \");\n for (const cookie of splitCookies) {\n const parsed = toughCookie.Cookie.parse(cookie);\n try {\n if (parsed) await ctx.cookie.setCookie(parsed, parsed.domain != \"zalo.me\" ? `https://${parsed.domain}` : origin);\n } catch (error: unknown) {\n logger(ctx).error(error);\n }\n }\n }\n\n const redirectURL = response.headers.get(\"location\");\n if (redirectURL) {\n const redirectOptions = { ...options };\n redirectOptions.method = \"GET\";\n if (!raw) {\n redirectOptions.headers = new Headers(redirectOptions.headers);\n redirectOptions.headers.set(\"Referer\", \"https://id.zalo.me/\");\n }\n return await request(ctx, redirectURL, redirectOptions);\n }\n\n return response;\n}\n\nexport async function getImageMetaData(ctx: ContextBase, filePath: string) {\n if (!ctx.options.imageMetadataGetter) {\n throw new ZaloApiMissingImageMetadataGetter();\n }\n\n const imageData = await ctx.options.imageMetadataGetter(filePath);\n if (!imageData) {\n throw new ZaloApiError(\"Failed to get image metadata\");\n }\n\n const fileName = filePath.split(\"/\").pop()!;\n\n return {\n fileName,\n totalSize: imageData.size,\n width: imageData.width,\n height: imageData.height,\n };\n}\n\nexport async function getFileSize(filePath: string) {\n return fs.promises.stat(filePath).then((s) => s.size);\n}\n\nexport async function getGifMetaData(ctx: ContextBase, filePath: string) {\n if (!ctx.options.imageMetadataGetter) {\n throw new ZaloApiMissingImageMetadataGetter();\n }\n\n const gifData = await ctx.options.imageMetadataGetter(filePath);\n if (!gifData) {\n throw new ZaloApiError(\"Failed to get gif metadata\");\n }\n\n const fileName = path.basename(filePath);\n\n return {\n fileName,\n totalSize: gifData.size,\n width: gifData.width,\n height: gifData.height,\n };\n}\n\nexport async function decodeEventData(parsed: Record<string, unknown>, cipherKey?: string) {\n if (typeof parsed.data !== \"string\")\n throw new ZaloApiError(`Invalid data, expected string but got ${typeof parsed.data}`);\n if (typeof parsed.encrypt !== \"number\")\n throw new ZaloApiError(`Invalid encrypt type, expected number but got ${typeof parsed.encrypt}`);\n if (parsed.encrypt < 0 || parsed.encrypt > 3)\n throw new ZaloApiError(`Invalid encrypt type, expected 0-3 but got ${parsed.encrypt}`);\n\n const rawData = parsed.data;\n const encryptType = parsed.encrypt as 0 | 1 | 2 | 3;\n\n if (encryptType === 0) return JSON.parse(rawData);\n\n const decodedBuffer = decodeBase64ToBuffer(encryptType === 1 ? rawData : decodeURIComponent(rawData));\n\n let decryptedBuffer: ArrayBuffer | Buffer = decodedBuffer;\n if (encryptType !== 1) {\n if (cipherKey && decodedBuffer.length >= 48) {\n const algorithm = {\n name: \"AES-GCM\",\n iv: decodedBuffer.subarray(0, 16),\n tagLength: 128,\n additionalData: decodedBuffer.subarray(16, 32),\n };\n const dataSource = decodedBuffer.subarray(32);\n\n const cryptoKey = await crypto.subtle.importKey(\"raw\", decodeBase64ToBuffer(cipherKey), algorithm, false, [\n \"decrypt\",\n ]);\n decryptedBuffer = await crypto.subtle.decrypt(algorithm, cryptoKey, dataSource);\n } else {\n throw new ZaloApiError(\"Invalid data length or missing cipher key\");\n }\n }\n\n const decompressedBuffer =\n encryptType === 3 ? new Uint8Array(decryptedBuffer) : pako.inflate(decryptedBuffer as ArrayBuffer);\n const decodedData = decodeUnit8Array(decompressedBuffer);\n\n if (!decodedData) return;\n return JSONBig.parse(decodedData);\n}\n\nexport async function getMd5LargeFileObject(source: AttachmentSource, fileSize: number) {\n const buffer = typeof source == \"string\" ? await fs.promises.readFile(source) : source.data;\n return new Promise<{\n currentChunk: number;\n data: string;\n }>((resolve) => {\n let currentChunk = 0;\n const chunkSize = 2097152, // Read in chunks of 2MB\n chunks = Math.ceil(fileSize / chunkSize),\n spark = new SparkMD5.ArrayBuffer();\n\n function loadNext() {\n const start = currentChunk * chunkSize,\n end = start + chunkSize >= fileSize ? fileSize : start + chunkSize;\n\n spark.append(new Uint8Array(buffer.subarray(start, end)).buffer as ArrayBuffer);\n currentChunk++;\n\n if (currentChunk < chunks) {\n loadNext();\n } else {\n resolve({\n currentChunk,\n data: spark.end(),\n });\n }\n }\n\n loadNext();\n });\n}\n\nexport const logger = (ctx: { options: { logging?: boolean } }) => ({\n verbose: (...args: unknown[]) => {\n if (ctx.options.logging) console.log(\"\\x1b[35m🚀 VERBOSE\\x1b[0m\", ...args);\n },\n info: (...args: unknown[]) => {\n if (ctx.options.logging) console.log(\"\\x1b[34mINFO\\x1b[0m\", ...args);\n },\n warn: (...args: unknown[]) => {\n if (ctx.options.logging) console.log(\"\\x1b[33mWARN\\x1b[0m\", ...args);\n },\n error: (...args: unknown[]) => {\n if (ctx.options.logging) console.log(\"\\x1b[31mERROR\\x1b[0m\", ...args);\n },\n success: (...args: unknown[]) => {\n if (ctx.options.logging) console.log(\"\\x1b[32mSUCCESS\\x1b[0m\", ...args);\n },\n timestamp: (...args: unknown[]) => {\n const now = new Date().toISOString();\n if (ctx.options.logging) console.log(`\\x1b[90m[${now}]\\x1b[0m`, ...args);\n },\n});\n\nexport function getClientMessageType(msgType: string) {\n if (msgType === \"webchat\") return 1;\n if (msgType === \"chat.voice\") return 31;\n if (msgType === \"chat.photo\") return 32;\n if (msgType === \"chat.sticker\") return 36;\n if (msgType === \"chat.doodle\") return 37;\n if (msgType === \"chat.recommended\") return 38;\n\n if (msgType === \"chat.link\") return 38; // don't know || if (msgType === \"chat.link\") return 1;\n if (msgType === \"chat.video.msg\") return 44; // not sure\n\n if (msgType === \"share.file\") return 46;\n if (msgType === \"chat.gif\") return 49;\n if (msgType === \"chat.location.new\") return 43;\n\n return 1;\n}\n\nexport function strPadLeft(e: number | string, t: string, n: number) {\n const a = (e = \"\" + e).length;\n return a === n ? e : a > n ? e.slice(-n) : t.repeat(n - a) + e;\n}\n\nexport function formatTime(format: string, timestamp: number = Date.now()): string {\n const date = new Date(timestamp);\n\n // using lib Intl\n const options: Intl.DateTimeFormatOptions = {\n year: \"numeric\",\n month: \"2-digit\",\n day: \"2-digit\",\n hour: \"2-digit\",\n minute: \"2-digit\",\n second: \"2-digit\",\n // hour12: false, // true or false is same <(\")\n };\n\n const formatted = new Intl.DateTimeFormat(\"vi-VN\", options).format(date);\n\n if (format.includes(\"%H\") || format.includes(\"%d\")) {\n return format\n .replace(\"%H\", date.getHours().toString().padStart(2, \"0\"))\n .replace(\"%M\", date.getMinutes().toString().padStart(2, \"0\"))\n .replace(\"%S\", date.getSeconds().toString().padStart(2, \"0\"))\n .replace(\"%d\", date.getDate().toString().padStart(2, \"0\"))\n .replace(\"%m\", (date.getMonth() + 1).toString().padStart(2, \"0\"))\n .replace(\"%Y\", date.getFullYear().toString());\n }\n\n return formatted;\n}\n\nexport function getFullTimeFromMillisecond(e: number) {\n const t = new Date(e);\n return (\n strPadLeft(t.getHours(), \"0\", 2) +\n \":\" +\n strPadLeft(t.getMinutes(), \"0\", 2) +\n \" \" +\n strPadLeft(t.getDate(), \"0\", 2) +\n \"/\" +\n strPadLeft(t.getMonth() + 1, \"0\", 2) +\n \"/\" +\n t.getFullYear()\n );\n}\n\nexport function getFileExtension(e: string) {\n return path.extname(e).slice(1);\n}\n\nexport function getFileName(e: string) {\n return path.basename(e);\n}\n\nexport function removeUndefinedKeys(e: Record<string, unknown>) {\n for (const t in e) if (e[t] === undefined) delete e[t];\n return e;\n}\n\nexport function getGroupEventType(act: string) {\n if (act == \"join_request\") return GroupEventType.JOIN_REQUEST;\n if (act == \"join\") return GroupEventType.JOIN;\n if (act == \"leave\") return GroupEventType.LEAVE;\n if (act == \"remove_member\") return GroupEventType.REMOVE_MEMBER;\n if (act == \"block_member\") return GroupEventType.BLOCK_MEMBER;\n if (act == \"update_setting\") return GroupEventType.UPDATE_SETTING;\n if (act == \"update_avatar\") return GroupEventType.UPDATE_AVATAR;\n if (act == \"update\") return GroupEventType.UPDATE;\n if (act == \"new_link\") return GroupEventType.NEW_LINK;\n if (act == \"add_admin\") return GroupEventType.ADD_ADMIN;\n if (act == \"remove_admin\") return GroupEventType.REMOVE_ADMIN;\n\n if (act == \"new_pin_topic\") return GroupEventType.NEW_PIN_TOPIC;\n if (act == \"update_pin_topic\") return GroupEventType.UPDATE_PIN_TOPIC;\n if (act == \"update_topic\") return GroupEventType.UPDATE_TOPIC;\n if (act == \"update_board\") return GroupEventType.UPDATE_BOARD;\n if (act == \"remove_board\") return GroupEventType.REMOVE_BOARD;\n if (act == \"reorder_pin_topic\") return GroupEventType.REORDER_PIN_TOPIC;\n if (act == \"unpin_topic\") return GroupEventType.UNPIN_TOPIC;\n if (act == \"remove_topic\") return GroupEventType.REMOVE_TOPIC;\n if (act == \"accept_remind\") return GroupEventType.ACCEPT_REMIND;\n if (act == \"reject_remind\") return GroupEventType.REJECT_REMIND;\n if (act == \"remind_topic\") return GroupEventType.REMIND_TOPIC;\n\n return GroupEventType.UNKNOWN;\n}\n\nexport function getFriendEventType(act: string) {\n if (act == \"add\") return FriendEventType.ADD;\n if (act == \"remove\") return FriendEventType.REMOVE;\n if (act == \"block\") return FriendEventType.BLOCK;\n if (act == \"unblock\") return FriendEventType.UNBLOCK;\n if (act == \"block_call\") return FriendEventType.BLOCK_CALL;\n if (act == \"unblock_call\") return FriendEventType.UNBLOCK_CALL;\n\n if (act == \"req_v2\") return FriendEventType.REQUEST;\n if (act == \"reject\") return FriendEventType.REJECT_REQUEST;\n if (act == \"undo_req\") return FriendEventType.UNDO_REQUEST;\n\n if (act == \"seen_fr_req\") return FriendEventType.SEEN_FRIEND_REQUEST;\n\n if (act == \"pin_unpin\") return FriendEventType.PIN_UNPIN;\n if (act == \"pin_create\") return FriendEventType.PIN_CREATE;\n\n return FriendEventType.UNKNOWN;\n}\n\ntype ZaloResponse<T> = {\n data: T | null;\n error: {\n message: string;\n code?: number;\n } | null;\n};\n\nexport async function handleZaloResponse<T = unknown>(ctx: ContextSession, response: Response, isEncrypted = true) {\n const result: ZaloResponse<T> = {\n data: null,\n error: null,\n };\n\n if (!response.ok) {\n result.error = {\n message: \"Request failed with status code \" + response.status,\n };\n return result;\n }\n\n try {\n const jsonData: {\n error_code: number;\n error_message: string;\n data: string;\n } = await response.json();\n\n if (jsonData.error_code != 0) {\n result.error = {\n message: jsonData.error_message,\n code: jsonData.error_code,\n };\n return result;\n }\n\n const decodedData: {\n error_code: number;\n error_message: string;\n data: T;\n } = isEncrypted ? JSON.parse(decodeAES(ctx.secretKey!, jsonData.data)!) : jsonData;\n\n if (decodedData.error_code != 0) {\n result.error = {\n message: decodedData.error_message,\n code: decodedData.error_code,\n };\n return result;\n }\n\n result.data = decodedData.data;\n } catch (error) {\n logger(ctx).error(\"Failed to parse response data:\", error);\n result.error = {\n message: \"Failed to parse response data\",\n };\n }\n\n return result;\n}\n\nexport async function resolveResponse<T = unknown>(\n ctx: ContextSession,\n res: Response,\n cb?: (result: ZaloResponse<unknown>) => T,\n isEncrypted?: boolean,\n) {\n const result = await handleZaloResponse<T>(ctx, res, isEncrypted);\n if (result.error) throw new ZaloApiError(result.error.message, result.error.code);\n if (cb) return cb(result);\n\n return result.data as T;\n}\n\nexport type FactoryUtils<T> = {\n makeURL: (\n baseURL: string,\n params?: Record<string, string | number>,\n apiVersion?: boolean,\n ) => ReturnType<typeof makeURL>;\n encodeAES: (data: cryptojs.lib.WordArray | string, t?: number) => ReturnType<typeof encodeAES>;\n request: (url: string, options?: RequestInit, raw?: boolean) => ReturnType<typeof request>;\n logger: ReturnType<typeof logger>;\n resolve: (\n res: Response,\n cb?: (result: ZaloResponse<unknown>) => T,\n isEncrypted?: boolean,\n ) => ReturnType<typeof resolveResponse<T>>;\n};\n\nexport function apiFactory<T>() {\n return <K extends (api: API, ctx: ContextSession, utils: FactoryUtils<T>) => unknown>(callback: K) => {\n return (ctx: ContextBase, api: API) => {\n if (!isContextSession(ctx)) throw new ZaloApiError(\"Invalid context \" + JSON.stringify(ctx, null, 2));\n\n const utils = {\n makeURL(baseURL: string, params?: Record<string, string | number>, apiVersion?: boolean) {\n return makeURL(ctx, baseURL, params, apiVersion);\n },\n encodeAES(data: cryptojs.lib.WordArray | string, t?: number) {\n return encodeAES(ctx.secretKey, data, t);\n },\n request(url: string, options?: RequestInit, raw?: boolean) {\n return request(ctx, url, options, raw);\n },\n logger: logger(ctx),\n resolve: (res: Response, cb?: (result: ZaloResponse<unknown>) => T, isEncrypted?: boolean) =>\n resolveResponse<T>(ctx, res, cb, isEncrypted),\n };\n\n return callback(api, ctx, utils) as ReturnType<K>;\n };\n };\n}\n\nexport function generateZaloUUID(userAgent: string) {\n return crypto.randomUUID() + \"-\" + cryptojs.MD5(userAgent).toString();\n}\n\n/**\n * Encrypts a 4-digit PIN to a 32-character hex string\n * @param pin 4-digit PIN number\n * @returns 32-character hex string\n */\nexport function encryptPin(pin: string): string {\n return crypto.createHash(\"md5\").update(pin).digest(\"hex\");\n}\n\n/**\n * Decrypts a 32-character hex string back to 4-digit PIN\n * Note: This is a one-way hash, so we can only verify if a PIN matches the hash\n * @param encryptedPin 32-character hex string\n * @param pin 4-digit PIN to verify\n * @returns true if the PIN matches the hash\n *\n * @example\n * const encryptedPin = (await api.getHiddenConversations()).pin;\n * checking pin created..\n * const isValid = validatePin(encryptedPin, \"1234\"); // true if pin created is 1234\n * const isInvalid = validatePin(encryptedPin, \"5678\"); // false if not pin created is 5678\n */\nexport function validatePin(encryptedPin: string, pin: string): boolean {\n const hash = crypto.createHash(\"md5\").update(pin).digest(\"hex\");\n return hash === encryptedPin;\n}\n\n/**\n * Converts a hex color code to a negative color number used by Zalo API\n * @param hex Hex color code (e.g. '#00FF00' or '00FF00')\n * @returns Negative color number (e.g. -16711936)\n *\n * @example\n * const negativeColor = hexToNegativeColor('#00FF00'); // Result: -16711936\n */\nexport function hexToNegativeColor(hex: string): number {\n if (!hex.startsWith(\"#\")) {\n hex = \"#\" + hex;\n }\n\n // rgb no alpha\n // const decimal = parseInt(hex.slice(1), 16);\n // return decimal - 4294967296;\n\n // rgb with alpha\n let hexValue = hex.slice(1);\n if (hexValue.length === 6) {\n hexValue = \"FF\" + hexValue;\n }\n const decimal = parseInt(hexValue, 16);\n return decimal > 0x7fffffff ? decimal - 4294967296 : decimal;\n}\n\n/**\n * Converts a negative color number from Zalo API to hex color code\n * @param negativeColor Negative color number (e.g. -16711936)\n * @returns Hex color code (e.g. '#00FF00')\n *\n * @example\n * const hexColor = negativeColorToHex(-16711936); // Result: '#00FF00'\n */\nexport function negativeColorToHex(negativeColor: number): string {\n // Add 2^32 to get positive number\n const positiveColor = negativeColor + 4294967296;\n\n // return \"#\" + positiveColor.toString(16).padStart(6, \"0\"); // rgb no alpha\n return \"#\" + positiveColor.toString(16).slice(-6).padStart(6, \"0\"); // rgb with alpha\n}\n","import { CookieJar, type SerializedCookie, type SerializedCookieJar } from \"tough-cookie\";\n\nimport { writeFile } from \"node:fs/promises\";\nimport type { ContextBase } from \"../context\";\nimport { ZaloApiError } from \"../Errors/ZaloApiError\";\nimport { logger, request } from \"../utils\";\nimport { ZaloApiLoginQRAborted } from \"../Errors/ZaloApiLoginQRAborted\";\nimport { ZaloApiLoginQRDeclined } from \"../Errors/ZaloApiLoginQRDeclined\";\n\nexport enum LoginQRCallbackEventType {\n QRCodeGenerated,\n QRCodeExpired,\n QRCodeScanned,\n QRCodeDeclined,\n GotLoginInfo,\n}\n\nexport type LoginQRCallbackEvent =\n | {\n type: LoginQRCallbackEventType.QRCodeGenerated;\n data: {\n code: string;\n image: string;\n options: {\n enabledCheckOCR: boolean;\n enabledMultiLayer: boolean;\n };\n };\n actions: {\n saveToFile: (qrPath?: string) => Promise<unknown>;\n retry: () => unknown;\n abort: () => unknown;\n };\n }\n | {\n type: LoginQRCallbackEventType.QRCodeExpired;\n data: null;\n actions: {\n retry: () => unknown;\n abort: () => unknown;\n };\n }\n | {\n type: LoginQRCallbackEventType.QRCodeScanned;\n data: {\n avatar: string;\n display_name: string;\n };\n actions: {\n retry: () => unknown;\n abort: () => unknown;\n };\n }\n | {\n type: LoginQRCallbackEventType.QRCodeDeclined;\n data: {\n code: string;\n };\n actions: {\n retry: () => unknown;\n abort: () => unknown;\n };\n }\n | {\n type: LoginQRCallbackEventType.GotLoginInfo;\n data: {\n cookie: SerializedCookie[];\n imei: string;\n userAgent: string;\n };\n actions: null;\n };\n\nexport type LoginQRCallback = (event: LoginQRCallbackEvent) => unknown;\n\nasync function loadLoginPage(ctx: ContextBase) {\n const response = await request(ctx, \"https://id.zalo.me/account?continue=https%3A%2F%2Fchat.zalo.me%2F\", {\n headers: {\n accept: \"text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7\",\n \"accept-language\": \"vi-VN,vi;q=0.9,fr-FR;q=0.8,fr;q=0.7,en-US;q=0.6,en;q=0.5\",\n \"cache-control\": \"max-age=0\",\n priority: \"u=0, i\",\n \"sec-ch-ua\": '\"Chromium\";v=\"130\", \"Google Chrome\";v=\"130\", \"Not?A_Brand\";v=\"99\"',\n \"sec-ch-ua-mobile\": \"?0\",\n \"sec-ch-ua-platform\": '\"Windows\"',\n \"sec-fetch-dest\": \"document\",\n \"sec-fetch-mode\": \"navigate\",\n \"sec-fetch-site\": \"same-site\",\n \"sec-fetch-user\": \"?1\",\n \"upgrade-insecure-requests\": \"1\",\n Referer: \"https://chat.zalo.me/\",\n \"Referrer-Policy\": \"strict-origin-when-cross-origin\",\n },\n method: \"GET\",\n });\n\n const html = await response.text();\n\n const regex = /https:\\/\\/stc-zlogin\\.zdn\\.vn\\/main-([\\d.]+)\\.js/;\n const match = html.match(regex);\n\n return match?.[1];\n}\n\nasync function getLoginInfo(ctx: ContextBase, version: string) {\n const form = new URLSearchParams();\n form.append(\"continue\", \"https://zalo.me/pc\");\n form.append(\"v\", version);\n\n return await request(ctx, \"https://id.zalo.me/account/logininfo\", {\n headers: {\n accept: \"*/*\",\n \"accept-language\": \"vi-VN,vi;q=0.9,fr-FR;q=0.8,fr;q=0.7,en-US;q=0.6,en;q=0.5\",\n \"content-type\": \"application/x-www-form-urlencoded\",\n priority: \"u=1, i\",\n \"sec-ch-ua\": '\"Chromium\";v=\"130\", \"Google Chrome\";v=\"130\", \"Not?A_Brand\";v=\"99\"',\n \"sec-ch-ua-mobile\": \"?0\",\n \"sec-ch-ua-platform\": '\"Windows\"',\n \"sec-fetch-dest\": \"empty\",\n \"sec-fetch-mode\": \"cors\",\n \"sec-fetch-site\": \"same-origin\",\n Referer: \"https://id.zalo.me/account?continue=https%3A%2F%2Fzalo.me%2Fpc\",\n \"Referrer-Policy\": \"strict-origin-when-cross-origin\",\n },\n body: form,\n method: \"POST\",\n })\n .then((res) => res.json())\n .catch(logger(ctx).error);\n}\n\nasync function verifyClient(ctx: ContextBase, version: string) {\n const form = new URLSearchParams();\n form.append(\"type\", \"device\");\n form.append(\"continue\", \"https://zalo.me/pc\");\n form.append(\"v\", version);\n\n return await request(ctx, \"https://id.zalo.me/account/verify-client\", {\n headers: {\n accept: \"*/*\",\n \"accept-language\": \"vi-VN,vi;q=0.9,fr-FR;q=0.8,fr;q=0.7,en-US;q=0.6,en;q=0.5\",\n \"content-type\": \"application/x-www-form-urlencoded\",\n priority: \"u=1, i\",\n \"sec-ch-ua\": '\"Chromium\";v=\"130\", \"Google Chrome\";v=\"130\", \"Not?A_Brand\";v=\"99\"',\n \"sec-ch-ua-mobile\": \"?0\",\n \"sec-ch-ua-platform\": '\"Windows\"',\n \"sec-fetch-dest\": \"empty\",\n \"sec-fetch-mode\": \"cors\",\n \"sec-fetch-site\": \"same-origin\",\n Referer: \"https://id.zalo.me/account?continue=https%3A%2F%2Fzalo.me%2Fpc\",\n \"Referrer-Policy\": \"strict-origin-when-cross-origin\",\n },\n body: form,\n method: \"POST\",\n })\n .then((res) => res.json())\n .catch(logger(ctx).error);\n}\n\nasync function generate(\n ctx: ContextBase,\n version: string,\n): Promise<{\n data: {\n code: string;\n image: string;\n options: {\n enabledCheckOCR: boolean;\n enabledMultiLayer: boolean;\n };\n } | null;\n error_code: number;\n error_message: string;\n}> {\n const form = new URLSearchParams();\n form.append(\"continue\", \"https://zalo.me/pc\");\n form.append(\"v\", version);\n\n return await request(ctx, \"https://id.zalo.me/account/authen/qr/generate\", {\n headers: {\n accept: \"*/*\",\n \"accept-language\": \"vi-VN,vi;q=0.9,fr-FR;q=0.8,fr;q=0.7,en-US;q=0.6,en;q=0.5\",\n \"content-type\": \"application/x-www-form-urlencoded\",\n priority: \"u=1, i\",\n \"sec-ch-ua\": '\"Chromium\";v=\"130\", \"Google Chrome\";v=\"130\", \"Not?A_Brand\";v=\"99\"',\n \"sec-ch-ua-mobile\": \"?0\",\n \"sec-ch-ua-platform\": '\"Windows\"',\n \"sec-fetch-dest\": \"empty\",\n \"sec-fetch-mode\": \"cors\",\n \"sec-fetch-site\": \"same-origin\",\n Referer: \"https://id.zalo.me/account?continue=https%3A%2F%2Fzalo.me%2Fpc\",\n \"Referrer-Policy\": \"strict-origin-when-cross-origin\",\n },\n body: form,\n method: \"POST\",\n })\n .then((res) => res.json())\n .catch(logger(ctx).error);\n}\n\nasync function saveQRCodeToFile(filepath: string, imageData: string) {\n await writeFile(filepath, imageData, \"base64\");\n}\n\nasync function waitingScan(\n ctx: ContextBase,\n version: string,\n code: string,\n signal: AbortSignal,\n): Promise<\n | {\n data: {\n avatar: string;\n display_name: string;\n } | null;\n error_code: number;\n error_message: string;\n }\n | undefined\n> {\n const form = new URLSearchParams();\n form.append(\"code\", code);\n form.append(\"continue\", \"https://chat.zalo.me/\");\n form.append(\"v\", version);\n\n return await request(ctx, \"https://id.zalo.me/account/authen/qr/waiting-scan\", {\n headers: {\n accept: \"*/*\",\n \"accept-language\": \"vi-VN,vi;q=0.9,fr-FR;q=0.8,fr;q=0.7,en-US;q=0.6,en;q=0.5\",\n \"content-type\": \"application/x-www-form-urlencoded\",\n priority: \"u=1, i\",\n \"sec-ch-ua\": '\"Chromium\";v=\"130\", \"Google Chrome\";v=\"130\", \"Not?A_Brand\";v=\"99\"',\n \"sec-ch-ua-mobile\": \"?0\",\n \"sec-ch-ua-platform\": '\"Windows\"',\n \"sec-fetch-dest\": \"empty\",\n \"sec-fetch-mode\": \"cors\",\n \"sec-fetch-site\": \"same-origin\",\n Referer: \"https://id.zalo.me/account?continue=https%3A%2F%2Fchat.zalo.me%2F\",\n \"Referrer-Policy\": \"strict-origin-when-cross-origin\",\n },\n body: form,\n method: \"POST\",\n signal,\n })\n .then((res) => res.json())\n .then((data) => {\n if (data.error_code == 8) {\n return waitingScan(ctx, version, code, signal);\n }\n\n return data;\n })\n .catch((e) => {\n if (!signal.aborted) logger(ctx).error(e);\n });\n}\n\nasync function waitingConfirm(\n ctx: ContextBase,\n version: string,\n code: string,\n signal: AbortSignal,\n): Promise<\n | {\n data: null;\n error_code: number;\n error_message: string;\n }\n | undefined\n> {\n const form = new URLSearchParams();\n form.append(\"code\", code);\n form.append(\"gToken\", \"\");\n form.append(\"gAction\", \"CONFIRM_QR\");\n form.append(\"continue\", \"https://chat.zalo.me/\");\n form.append(\"v\", version);\n\n logger(ctx).info(\"Please confirm on your phone\");\n\n return await request(ctx, \"https://id.zalo.me/account/authen/qr/waiting-confirm\", {\n headers: {\n accept: \"*/*\",\n \"accept-language\": \"vi-VN,vi;q=0.9,fr-FR;q=0.8,fr;q=0.7,en-US;q=0.6,en;q=0.5\",\n \"content-type\": \"application/x-www-form-urlencoded\",\n priority: \"u=1, i\",\n \"sec-ch-ua\": '\"Chromium\";v=\"130\", \"Google Chrome\";v=\"130\", \"Not?A_Brand\";v=\"99\"',\n \"sec-ch-ua-mobile\": \"?0\",\n \"sec-ch-ua-platform\": '\"Windows\"',\n \"sec-fetch-dest\": \"empty\",\n \"sec-fetch-mode\": \"cors\",\n \"sec-fetch-site\": \"same-origin\",\n Referer: \"https://id.zalo.me/account?continue=https%3A%2F%2Fchat.zalo.me%2F\",\n \"Referrer-Policy\": \"strict-origin-when-cross-origin\",\n },\n body: form,\n method: \"POST\",\n signal,\n })\n .then((res) => res.json())\n .then((data) => {\n if (data.error_code == 8) {\n return waitingConfirm(ctx, version, code, signal);\n }\n\n return data;\n })\n .catch((e) => {\n if (!signal.aborted) logger(ctx).error(e);\n });\n}\n\nasync function checkSession(ctx: ContextBase) {\n return await request(\n ctx,\n \"https://id.zalo.me/account/checksession?continue=https%3A%2F%2Fchat.zalo.me%2Findex.html\",\n {\n headers: {\n accept: \"text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7\",\n \"accept-language\": \"vi-VN,vi;q=0.9,fr-FR;q=0.8,fr;q=0.7,en-US;q=0.6,en;q=0.5\",\n priority: \"u=0, i\",\n \"sec-ch-ua\": '\"Chromium\";v=\"130\", \"Google Chrome\";v=\"130\", \"Not?A_Brand\";v=\"99\"',\n \"sec-ch-ua-mobile\": \"?0\",\n \"sec-ch-ua-platform\": '\"Windows\"',\n \"sec-fetch-dest\": \"document\",\n \"sec-fetch-mode\": \"navigate\",\n \"sec-fetch-site\": \"same-origin\",\n \"upgrade-insecure-requests\": \"1\",\n Referer: \"https://id.zalo.me/account?continue=https%3A%2F%2Fchat.zalo.me%2F\",\n \"Referrer-Policy\": \"strict-origin-when-cross-origin\",\n },\n redirect: \"manual\",\n method: \"GET\",\n },\n ).catch(logger(ctx).error);\n}\n\nasync function getUserInfo(ctx: ContextBase): Promise<\n | {\n data: {\n logged: boolean;\n session_chat_valid: boolean;\n info: {\n name: string;\n avatar: string;\n };\n } | null;\n error_code: number;\n error_message: string;\n }\n | undefined\n> {\n return await request(ctx, \"https://jr.chat.zalo.me/jr/userinfo\", {\n headers: {\n accept: \"*/*\",\n \"accept-language\": \"vi-VN,vi;q=0.9,fr-FR;q=0.8,fr;q=0.7,en-US;q=0.6,en;q=0.5\",\n priority: \"u=1, i\",\n \"sec-ch-ua\": '\"Chromium\";v=\"130\", \"Google Chrome\";v=\"130\", \"Not?A_Brand\";v=\"99\"',\n \"sec-ch-ua-mobile\": \"?0\",\n \"sec-ch-ua-platform\": '\"Windows\"',\n \"sec-fetch-dest\": \"empty\",\n \"sec-fetch-mode\": \"cors\",\n \"sec-fetch-site\": \"same-site\",\n Referer: \"https://chat.zalo.me/\",\n \"Referrer-Policy\": \"strict-origin-when-cross-origin\",\n },\n method: \"GET\",\n })\n .then((res) => res.json())\n .catch(logger(ctx).error);\n}\n\nexport async function loginQR(\n ctx: ContextBase,\n options: { userAgent: string; qrPath?: string },\n callback?: LoginQRCallback,\n) {\n ctx.cookie = new CookieJar();\n ctx.userAgent = options.userAgent;\n\n return new Promise<{\n userInfo: {\n name: string;\n avatar: string;\n };\n cookies: SerializedCookieJar[\"cookies\"];\n // @TODO\n // eslint-disable-next-line\n } | null>(async (resolve, reject) => {\n const controller = new AbortController();\n let qrTimeout: NodeJS.Timeout | null = null;\n\n function cleanUp() {\n controller.abort();\n if (qrTimeout) {\n clearTimeout(qrTimeout);\n qrTimeout = null;\n }\n }\n\n try {\n function retry() {\n cleanUp();\n return resolve(loginQR(ctx, options, callback));\n }\n\n function abort() {\n cleanUp();\n return reject(new ZaloApiLoginQRAborted());\n }\n\n if (ctx.options.logging) console.log();\n\n const loginVersion = await loadLoginPage(ctx);\n if (!loginVersion) throw new ZaloApiError(\"Cannot get API login version\");\n\n logger(ctx).info(\"Got login version:\", loginVersion);\n\n await getLoginInfo(ctx, loginVersion);\n await verifyClient(ctx, loginVersion);\n const qrGenResult = await generate(ctx, loginVersion);\n if (!qrGenResult || !qrGenResult.data)\n throw new ZaloApiError(`Unable to generate QRCode\\nResponse: ${JSON.stringify(qrGenResult, null, 2)}`);\n\n const qrData = qrGenResult.data;\n\n if (callback) {\n callback({\n type: LoginQRCallbackEventType.QRCodeGenerated,\n data: {\n ...qrGenResult.data,\n image: qrGenResult.data.image.replace(/^data:image\\/png;base64,/, \"\"),\n },\n actions: {\n async saveToFile(qrPath = options.qrPath ?? \"qr.png\") {\n await saveQRCodeToFile(qrPath, qrData.image.replace(/^data:image\\/png;base64,/, \"\"));\n logger(ctx).info(\"Scan the QR code at\", `'${qrPath}'`, \"to proceed with login\");\n },\n retry,\n abort,\n },\n });\n } else {\n const qrPath = options.qrPath ?? \"qr.png\";\n\n await saveQRCodeToFile(qrPath, qrData.image.replace(/^data:image\\/png;base64,/, \"\"));\n logger(ctx).info(\"Scan the QR code at\", `'${qrPath}'`, \"to proceed with login\");\n }\n\n qrTimeout = setTimeout(() => {\n cleanUp();\n\n logger(ctx).info(\"QR expired!\");\n\n if (callback) {\n callback({\n type: LoginQRCallbackEventType.QRCodeExpired,\n data: null,\n actions: {\n retry,\n abort,\n },\n });\n } else {\n retry();\n }\n }, 100_000);\n\n const scanResult = await waitingScan(ctx, loginVersion, qrGenResult.data.code, controller.signal);\n if (!scanResult || !scanResult.data) throw new ZaloApiError(\"Cannot get scan result\");\n\n if (callback) {\n callback({\n type: LoginQRCallbackEventType.QRCodeScanned,\n data: scanResult.data,\n actions: {\n retry,\n abort,\n },\n });\n }\n\n const confirmResult = await waitingConfirm(ctx, loginVersion, qrGenResult.data.code, controller.signal);\n if (!confirmResult) throw new ZaloApiError(\"Cannot get confirm result\");\n\n clearTimeout(qrTimeout);\n\n if (confirmResult.error_code == -13) {\n if (callback) {\n callback({\n type: LoginQRCallbackEventType.QRCodeDeclined,\n data: {\n code: qrData.code,\n },\n actions: {\n retry,\n abort,\n },\n });\n } else {\n logger(ctx).error(\"QRCode login declined\");\n throw new ZaloApiLoginQRDeclined();\n }\n\n return;\n } else if (confirmResult.error_code != 0) {\n throw new ZaloApiError(`An error has occurred.\\nResponse: ${JSON.stringify(confirmResult, null, 2)}`);\n }\n\n const checkSessionResult = await checkSession(ctx);\n if (!checkSessionResult) throw new ZaloApiError(\"Cannot get session, login failed\");\n\n logger(ctx).info(\"Successfully logged into the account\", scanResult.data.display_name);\n\n const userInfo = await getUserInfo(ctx);\n if (!userInfo || !userInfo.data) throw new ZaloApiError(\"Can't get account info\");\n if (!userInfo.data.logged) throw new ZaloApiError(\"Can't login\");\n\n resolve({\n cookies: ctx.cookie!.toJSON()!.cookies,\n userInfo: userInfo.data.info,\n });\n } catch (error) {\n cleanUp();\n reject(error);\n }\n });\n}\n","import type { ContextBase } from \"../context\";\nimport assign from \"lodash/assign\";\n\nimport { ZaloApiError } from \"../Errors/ZaloApiError\";\nimport { decryptResp, getSignKey, logger, makeURL, ParamsEncryptor, request } from \"../utils\";\n\nexport async function login(ctx: ContextBase, encryptParams: boolean) {\n const encryptedParams = await getEncryptParam(ctx, encryptParams, \"getlogininfo\");\n\n try {\n const response = await request(\n ctx,\n makeURL(ctx, \"https://wpa.chat.zalo.me/api/login/getLoginInfo\", {\n ...encryptedParams.params,\n nretry: 0,\n }),\n );\n if (!response.ok) throw new ZaloApiError(\"Failed to fetch login info: \" + response.statusText);\n const data = await response.json();\n\n if (encryptedParams.enk) {\n const decryptedData = decryptResp(encryptedParams.enk, data.data);\n return decryptedData != null && typeof decryptedData != \"string\" ? decryptedData : null;\n }\n\n return null;\n } catch (error) {\n logger(ctx).error(\"Login failed:\", error);\n throw error;\n }\n}\n\nexport async function getServerInfo(ctx: ContextBase, encryptParams: boolean) {\n const encryptedParams = await getEncryptParam(ctx, encryptParams, \"getserverinfo\");\n if (!encryptedParams.params.signkey || typeof encryptedParams.params.signkey !== \"string\")\n throw new ZaloApiError(\"Missing signkey\");\n\n const response = await request(\n ctx,\n makeURL(\n ctx,\n \"https://wpa.chat.zalo.me/api/login/getServerInfo\",\n {\n imei: ctx.imei as string,\n type: ctx.API_TYPE,\n client_version: ctx.API_VERSION,\n computer_name: \"Web\",\n signkey: encryptedParams.params.signkey,\n },\n false,\n ),\n );\n if (!response.ok) throw new ZaloApiError(\"Failed to fetch server info: \" + response.statusText);\n const data = await response.json();\n\n if (data.data == null) throw new ZaloApiError(\"Failed to fetch server info: \" + data.error_message);\n return data.data;\n}\n\nasync function getEncryptParam(ctx: ContextBase, encryptParams: boolean, type: string) {\n const params = {} as Record<string, unknown>;\n const data = {\n computer_name: \"Web\",\n imei: ctx.imei!,\n language: ctx.language!,\n ts: Date.now(),\n };\n const encryptedData = await _encryptParam(ctx, data, encryptParams);\n\n if (encryptedData == null) assign(params, data);\n else {\n const { encrypted_params, encrypted_data } = encryptedData;\n assign(params, encrypted_params);\n params.params = encrypted_data;\n }\n\n params.type = ctx.API_TYPE;\n params.client_version = ctx.API_VERSION;\n params.signkey =\n type == \"getserverinfo\"\n ? getSignKey(type, {\n imei: ctx.imei,\n type: ctx.API_TYPE,\n client_version: ctx.API_VERSION,\n computer_name: \"Web\",\n })\n : getSignKey(type, params);\n\n return {\n params,\n enk: encryptedData ? encryptedData.enk : null,\n };\n}\n\nasync function _encryptParam(ctx: ContextBase, data: Record<string, unknown>, encryptParams: boolean) {\n if (encryptParams) {\n const encryptor = new ParamsEncryptor({\n type: ctx.API_TYPE,\n imei: data.imei as string,\n firstLaunchTime: Date.now(),\n });\n try {\n const stringifiedData = JSON.stringify(data);\n const encryptedKey = encryptor.getEncryptKey();\n const encodedData = ParamsEncryptor.encodeAES(encryptedKey, stringifiedData, \"base64\", false);\n const params = encryptor.getParams();\n\n return params\n ? {\n encrypted_data: encodedData,\n encrypted_params: params,\n enk: encryptedKey,\n }\n : null;\n } catch (error) {\n throw new ZaloApiError(\"Failed to encrypt params: \" + error);\n }\n }\n return null;\n}\n","import { compare } from \"semver\";\nimport { isBun, logger } from \"./utils\";\nimport type { ContextBase } from \"./context\";\n\nconst VERSION = \"2.0.4\";\nconst NPM_REGISTRY = \"https://registry.npmjs.org/zca-js\";\n\nexport async function checkUpdate(ctx: ContextBase) {\n if (!ctx.options.checkUpdate) return;\n\n const _options = {\n ...(isBun\n ? {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n proxy: ctx.options.agent?.proxy?.href,\n }\n : { agent: ctx.options.agent }),\n };\n const response = await ctx.options.polyfill(NPM_REGISTRY, _options as RequestInit).catch(() => null);\n if (!response || !response.ok) return;\n\n const data = await response.json().catch(() => null);\n if (!data) return;\n\n const latestVersion = data[\"dist-tags\"].latest;\n if (compare(VERSION, latestVersion) === -1) {\n logger(ctx).info(`A new version of zca-js is available: ${latestVersion}`);\n } else {\n logger(ctx).info(\"zca-js is up to date\");\n }\n}\n","import EventEmitter from \"events\";\nimport WebSocket from \"ws\";\nimport { type FriendEvent, initializeFriendEvent, type TFriendEvent } from \"../models/FriendEvent\";\nimport { type GroupEvent, initializeGroupEvent, type TGroupEvent } from \"../models/GroupEvent\";\nimport type { Message, TGroupMessage, TMessage, TReaction, Typing } from \"../models/index\";\nimport { GroupMessage, UserMessage, Reaction, Undo, ThreadType, GroupTyping, UserTyping } from \"../models/index\";\nimport { decodeEventData, getFriendEventType, getGroupEventType, hasOwn, logger, makeURL } from \"../utils\";\nimport { ZaloApiError } from \"../Errors/ZaloApiError\";\nimport type { ContextSession } from \"../context\";\nimport { type SeenMessage, GroupSeenMessage, UserSeenMessage } from \"../models/SeenMessage\";\nimport { type DeliveredMessage, UserDeliveredMessage, GroupDeliveredMessage } from \"../models/DeliveredMessage\";\n\ntype UploadEventData = {\n fileUrl: string;\n fileId: string;\n};\n\nexport type WsPayload<T = Record<string, unknown>> = {\n version: number;\n cmd: number;\n subCmd: number;\n data: T;\n};\n\nexport type OnMessageCallback = (message: Message) => unknown;\nexport type OnClosedCallback = (code: CloseReason, reason: string) => unknown;\nexport type OnErrorCallback = (error: unknown) => unknown;\n\nexport enum CloseReason {\n ManualClosure = 1000,\n AbnormalClosure = 1006,\n DuplicateConnection = 3000,\n KickConnection = 3003,\n}\n\ninterface ListenerEvents {\n connected: [];\n disconnected: [code: CloseReason, reason: string];\n closed: [code: CloseReason, reason: string];\n error: [error: unknown];\n typing: [typing: Typing];\n message: [message: Message];\n old_messages: [messages: Message[], type: ThreadType];\n seen_messages: [messages: SeenMessage[]];\n delivered_messages: [messages: DeliveredMessage[]];\n reaction: [reaction: Reaction];\n old_reactions: [reactions: Reaction[], isGroup: boolean];\n upload_attachment: [data: UploadEventData];\n undo: [data: Undo];\n friend_event: [data: FriendEvent];\n group_event: [data: GroupEvent];\n cipher_key: [key: string];\n}\n\nexport class Listener extends EventEmitter<ListenerEvents> {\n private wsURL: string;\n private cookie: string;\n private userAgent: string;\n\n private ws: WebSocket | null;\n private retryCount: Record<\n string,\n {\n count: number;\n max: number;\n times: number[];\n }\n >;\n private rotateCount: number;\n\n private onConnectedCallback: () => unknown;\n private onClosedCallback: OnClosedCallback;\n private onErrorCallback: OnErrorCallback;\n private onMessageCallback: OnMessageCallback;\n private cipherKey?: string;\n\n private selfListen;\n private pingInterval?: NodeJS.Timeout;\n\n private id = 0;\n\n constructor(\n private ctx: ContextSession,\n private urls: string[],\n ) {\n super();\n if (!ctx.cookie) throw new ZaloApiError(\"Cookie is not available\");\n if (!ctx.userAgent) throw new ZaloApiError(\"User agent is not available\");\n\n this.wsURL = makeURL(this.ctx, this.urls[0], {\n t: Date.now(),\n });\n this.retryCount = {};\n this.rotateCount = 0;\n\n for (const retry in ctx.settings.features.socket.retries) {\n const { times, max } = ctx.settings.features.socket.retries[retry];\n this.retryCount[retry] = {\n count: 0,\n max: max || 0,\n times: typeof times === \"number\" ? [times] : times,\n };\n }\n\n this.cookie = ctx.cookie.getCookieStringSync(\"https://chat.zalo.me\");\n this.userAgent = ctx.userAgent;\n\n this.selfListen = ctx.options.selfListen;\n\n this.ws = null;\n\n this.onConnectedCallback = () => {};\n this.onClosedCallback = () => {};\n this.onErrorCallback = () => {};\n this.onMessageCallback = () => {};\n }\n\n /**\n * @deprecated Use `on` method instead\n */\n public onConnected(cb: () => unknown) {\n this.onConnectedCallback = cb;\n }\n\n /**\n * @deprecated Use `on` method instead\n */\n public onClosed(cb: OnClosedCallback) {\n this.onClosedCallback = cb;\n }\n\n /**\n * @deprecated Use `on` method instead\n */\n public onError(cb: OnErrorCallback) {\n this.onErrorCallback = cb;\n }\n\n /**\n * @deprecated Use `on` method instead\n */\n public onMessage(cb: OnMessageCallback) {\n this.onMessageCallback = cb;\n }\n\n private canRetry(code: CloseReason) {\n if (!this.ctx.settings.features.socket.close_and_retry_codes.includes(code)) return false;\n if (this.retryCount[code.toString()].count >= this.retryCount[code.toString()].max) return false;\n this.retryCount[code.toString()].count++;\n\n const { count, max, times } = this.retryCount[code.toString()];\n const retryTime = count - 1 < times.length ? times[count - 1] : times[times.length - 1];\n logger(this.ctx).verbose(`Retry for code ${code} in ${retryTime}ms (${count}/${max})`);\n\n return retryTime;\n }\n\n private shouldRotate(code: CloseReason) {\n if (!this.ctx.settings.features.socket.rotate_error_codes.includes(code)) return false;\n if (this.rotateCount >= this.urls.length - 1) return false;\n\n return true;\n }\n\n private rotateEndpoint() {\n this.rotateCount++;\n this.wsURL = makeURL(this.ctx, this.urls[this.rotateCount], {\n t: Date.now(),\n });\n logger(this.ctx).verbose(`Rotating endpoint to ${this.wsURL}`);\n }\n\n public start({ retryOnClose = false }: { retryOnClose?: boolean } = {}) {\n if (this.ws) throw new ZaloApiError(\"Already started\");\n\n const ws = new WebSocket(this.wsURL, {\n headers: {\n \"accept-encoding\": \"gzip, deflate, br, zstd\",\n \"accept-language\": \"en-US,en;q=0.9\",\n \"cache-control\": \"no-cache\",\n connection: \"Upgrade\",\n host: new URL(this.wsURL).host,\n origin: \"https://chat.zalo.me\",\n prgama: \"no-cache\",\n \"sec-websocket-extensions\": \"permessage-deflate; client_max_window_bits\",\n \"sec-websocket-version\": \"13\",\n upgrade: \"websocket\",\n \"user-agent\": this.userAgent,\n cookie: this.cookie,\n },\n agent: this.ctx.options.agent\n });\n this.ws = ws;\n\n ws.onopen = () => {\n this.onConnectedCallback();\n this.emit(\"connected\");\n };\n\n ws.onclose = (event) => {\n this.reset();\n this.emit(\"disconnected\", event.code as CloseReason, event.reason);\n const retry = retryOnClose && this.canRetry(event.code as CloseReason);\n if (retry && retryOnClose) {\n const shouldRotate = this.shouldRotate(event.code as CloseReason);\n if (shouldRotate) {\n this.rotateEndpoint();\n }\n setTimeout(() => {\n this.start({ retryOnClose: true });\n }, retry);\n } else {\n this.onClosedCallback(event.code, event.reason);\n this.emit(\"closed\", event.code as CloseReason, event.reason);\n }\n };\n\n ws.onerror = (event) => {\n this.onErrorCallback(event);\n this.emit(\"error\", event);\n };\n\n ws.onmessage = async (event) => {\n const { data } = event;\n if (!(data instanceof Buffer)) return;\n\n const encodedHeader = data.subarray(0, 4);\n const [version, cmd, subCmd] = getHeader(encodedHeader);\n\n try {\n const dataToDecode = data.subarray(4);\n const decodedData = new TextDecoder(\"utf-8\").decode(dataToDecode);\n if (decodedData.length == 0) return;\n\n const parsed = JSON.parse(decodedData);\n\n if (version == 1 && cmd == 1 && subCmd == 1 && hasOwn(parsed, \"key\")) {\n this.cipherKey = parsed.key;\n this.emit(\"cipher_key\", parsed.key);\n\n if (this.pingInterval) clearInterval(this.pingInterval);\n\n const ping = () => {\n const payload = {\n version: 1,\n cmd: 2,\n subCmd: 1,\n data: { eventId: Date.now() },\n };\n this.sendWs(payload, false);\n };\n\n this.pingInterval = setInterval(() => {\n ping();\n }, this.ctx.settings.features.socket.ping_interval);\n }\n\n if (version == 1 && cmd == 501 && subCmd == 0) {\n const parsedData = (await decodeEventData(parsed, this.cipherKey)).data;\n const { msgs } = parsedData;\n for (const msg of msgs) {\n if (typeof msg.content == \"object\" && hasOwn(msg.content, \"deleteMsg\")) {\n const undoObject = new Undo(this.ctx.uid, msg, false);\n if (undoObject.isSelf && !this.selfListen) continue;\n this.emit(\"undo\", undoObject);\n } else {\n const messageObject = new UserMessage(this.ctx.uid, msg);\n if (messageObject.isSelf && !this.selfListen) continue;\n this.onMessageCallback(messageObject);\n this.emit(\"message\", messageObject);\n }\n }\n }\n\n if (version == 1 && cmd == 521 && subCmd == 0) {\n const parsedData = (await decodeEventData(parsed, this.cipherKey)).data;\n const { groupMsgs } = parsedData;\n for (const msg of groupMsgs) {\n if (typeof msg.content == \"object\" && hasOwn(msg.content, \"deleteMsg\")) {\n const undoObject = new Undo(this.ctx.uid, msg, true);\n if (undoObject.isSelf && !this.selfListen) continue;\n this.emit(\"undo\", undoObject);\n } else {\n const messageObject = new GroupMessage(this.ctx.uid, msg);\n if (messageObject.isSelf && !this.selfListen) continue;\n this.onMessageCallback(messageObject);\n this.emit(\"message\", messageObject);\n }\n }\n }\n\n if (version == 1 && cmd == 601 && subCmd == 0) {\n const parsedData = (await decodeEventData(parsed, this.cipherKey)).data;\n const { controls } = parsedData;\n for (const control of controls) {\n if (control.content.act_type == \"file_done\") {\n const data = {\n fileUrl: control.content.data.url,\n fileId: control.content.fileId,\n };\n\n const uploadCallback = this.ctx.uploadCallbacks.get(String(control.content.fileId));\n if (uploadCallback) uploadCallback(data);\n this.ctx.uploadCallbacks.delete(String(control.content.fileId));\n\n this.emit(\"upload_attachment\", data);\n } else if (control.content.act_type == \"group\") {\n // 31/08/2024\n // for some reason, Zalo send both join and join_reject event when admin approve join requests\n // Zalo itself doesn't seem to handle this properly either, so we gonna ignore the join_reject event\n\n if (control.content.act == \"join_reject\") continue;\n\n const groupEventData: TGroupEvent =\n typeof control.content.data == \"string\"\n ? JSON.parse(control.content.data)\n : control.content.data;\n\n const groupEvent = initializeGroupEvent(\n this.ctx.uid,\n groupEventData,\n getGroupEventType(control.content.act),\n control.content.act\n );\n if (groupEvent.isSelf && !this.selfListen) continue;\n this.emit(\"group_event\", groupEvent);\n } else if (control.content.act_type == \"fr\") {\n // 28/02/2025\n // Zalo send both req and req_v2 event when user send friend request\n // Zalo itself doesn't seem to handle this properly either, so we gonna ignore the req event\n\n if (control.content.act == \"req\") continue;\n\n const friendEventData: TFriendEvent =\n typeof control.content.data == \"string\"\n ? JSON.parse(control.content.data)\n : control.content.data;\n\n // Handles the case when act is \"pin_create\" and params is a string\n if (\n typeof friendEventData == \"object\" &&\n \"topic\" in friendEventData &&\n typeof friendEventData.topic == \"object\" &&\n \"params\" in friendEventData.topic\n ) {\n friendEventData.topic.params = JSON.parse(`${friendEventData.topic.params}`);\n }\n\n const friendEvent = initializeFriendEvent(\n this.ctx.uid,\n typeof friendEventData == \"number\" ? control.content.data : friendEventData,\n getFriendEventType(control.content.act),\n );\n if (friendEvent.isSelf && !this.selfListen) continue;\n this.emit(\"friend_event\", friendEvent);\n }\n }\n }\n\n if (cmd == 612) {\n const parsedData = (await decodeEventData(parsed, this.cipherKey)).data;\n const { reacts, reactGroups } = parsedData;\n\n for (const react of reacts) {\n react.content = JSON.parse(react.content);\n const reactionObject = new Reaction(this.ctx.uid, react, false);\n if (reactionObject.isSelf && !this.selfListen) continue;\n\n this.emit(\"reaction\", reactionObject);\n }\n\n for (const reactGroup of reactGroups) {\n reactGroup.content = JSON.parse(reactGroup.content);\n const reactionObject = new Reaction(this.ctx.uid, reactGroup, true);\n if (reactionObject.isSelf && !this.selfListen) continue;\n\n this.emit(\"reaction\", reactionObject);\n }\n }\n\n if (cmd == 610 || cmd == 611) {\n const parsedData = (await decodeEventData(parsed, this.cipherKey)).data;\n const isGroup = cmd == 611;\n\n const reacts = parsedData[isGroup ? \"reactGroups\" : \"reacts\"] as TReaction[];\n const reactionObjects = reacts.map((react) => new Reaction(this.ctx.uid, react, isGroup));\n\n this.emit(\"old_reactions\", reactionObjects, isGroup);\n }\n\n if (cmd == 510 && subCmd == 1) {\n const parsedData = (await decodeEventData(parsed, this.cipherKey)).data;\n const msgs = parsedData.msgs as TMessage[];\n const responseMsgs = msgs.map((msg) => new UserMessage(this.ctx.uid, msg));\n this.emit(\"old_messages\", responseMsgs, ThreadType.User);\n }\n\n if (cmd == 511 && subCmd == 1) {\n const parsedData = (await decodeEventData(parsed, this.cipherKey)).data;\n const groupMsgs = parsedData.groupMsgs as TGroupMessage[];\n const responseMsgs = groupMsgs.map((msg) => new GroupMessage(this.ctx.uid, msg));\n this.emit(\"old_messages\", responseMsgs, ThreadType.Group);\n }\n\n if (cmd == 602 && subCmd == 0) {\n const parsedData = (await decodeEventData(parsed, this.cipherKey)).data;\n const { actions } = parsedData;\n\n for (const action of actions) {\n const data = JSON.parse(`{${action.data}}`);\n if (action.act_type == \"typing\") {\n if (action.act == \"typing\") {\n const typingObject = new UserTyping(data);\n this.emit(\"typing\", typingObject);\n } else if (action.act == \"gtyping\") {\n // 26/02/2025\n // For a group with only two people, Zalo doesn't send a typing event.\n\n const typingObject = new GroupTyping(data);\n this.emit(\"typing\", typingObject);\n }\n }\n }\n }\n\n if (cmd == 502 && subCmd == 0) {\n const parsedData = (await decodeEventData(parsed, this.cipherKey)).data;\n const { delivereds: deliveredMsgs, seens: seenMsgs } = parsedData;\n\n if (Array.isArray(deliveredMsgs) && deliveredMsgs.length > 0) {\n const deliveredObjects = deliveredMsgs.map((delivered) => new UserDeliveredMessage(delivered));\n this.emit(\"delivered_messages\", deliveredObjects);\n }\n\n if (Array.isArray(seenMsgs) && seenMsgs.length > 0) {\n const seenObjects = seenMsgs.map((seen) => new UserSeenMessage(seen));\n this.emit(\"seen_messages\", seenObjects);\n }\n }\n\n if (cmd == 522 && subCmd == 0) {\n const parsedData = (await decodeEventData(parsed, this.cipherKey)).data;\n const { delivereds: deliveredMsgs, groupSeens: groupSeenMsgs } = parsedData;\n\n if (Array.isArray(deliveredMsgs) && deliveredMsgs.length > 0) {\n let deliveredObjects = deliveredMsgs.map(\n (delivered) => new GroupDeliveredMessage(this.ctx.uid, delivered),\n );\n if (!this.selfListen)\n deliveredObjects = deliveredObjects.filter((delivered) => !delivered.isSelf);\n this.emit(\"delivered_messages\", deliveredObjects);\n }\n\n if (Array.isArray(groupSeenMsgs) && groupSeenMsgs.length > 0) {\n let seenObjects = groupSeenMsgs.map((seen) => new GroupSeenMessage(this.ctx.uid, seen));\n if (!this.selfListen) seenObjects = seenObjects.filter((seen) => !seen.isSelf);\n this.emit(\"seen_messages\", seenObjects);\n }\n }\n\n if (version == 1 && cmd == 3000 && subCmd == 0) {\n logger(this.ctx).error();\n logger(this.ctx).error(\"Another connection is opened, closing this one\");\n logger(this.ctx).error();\n if (ws.readyState !== WebSocket.CLOSED) ws.close(CloseReason.DuplicateConnection);\n }\n } catch (error) {\n this.onErrorCallback(error);\n this.emit(\"error\", error);\n }\n };\n }\n\n public stop() {\n if (this.ws) {\n this.ws.close(CloseReason.ManualClosure);\n this.reset();\n }\n }\n\n public sendWs(payload: WsPayload, requireId: boolean = true) {\n if (this.ws) {\n if (requireId) payload.data[\"req_id\"] = `req_${this.id++}`;\n\n const encodedData = new TextEncoder().encode(JSON.stringify(payload.data));\n const dataLength = encodedData.length;\n\n const data = new DataView(Buffer.alloc(4 + dataLength).buffer);\n data.setUint8(0, payload.version);\n data.setInt32(1, payload.cmd, true);\n data.setInt8(3, payload.subCmd);\n\n encodedData.forEach((e, i) => {\n data.setUint8(4 + i, e);\n });\n\n this.ws.send(data);\n }\n }\n\n /**\n * Request old messages\n *\n * @param lastMsgId\n */\n public requestOldMessages(threadType: ThreadType, lastMsgId: string | null = null) {\n const payload = {\n version: 1,\n cmd: threadType === ThreadType.User ? 510 : 511,\n subCmd: 1,\n data: { first: true, lastId: lastMsgId, preIds: [] },\n };\n this.sendWs(payload);\n }\n\n /**\n * Request old messages\n *\n * @param lastMsgId\n */\n public requestOldReactions(threadType: ThreadType, lastMsgId: string | null = null) {\n const payload = {\n version: 1,\n cmd: threadType === ThreadType.User ? 610 : 611,\n subCmd: 1,\n data: { first: true, lastId: lastMsgId, preIds: [] },\n };\n this.sendWs(payload);\n }\n\n private reset() {\n this.ws = null;\n this.cipherKey = undefined;\n if (this.pingInterval) clearInterval(this.pingInterval);\n }\n}\n\nfunction getHeader(buffer: Buffer) {\n if (buffer.byteLength < 4) {\n throw new ZaloApiError(\"Invalid header\");\n }\n\n return [buffer[0], buffer.readUInt16LE(1), buffer[3]];\n}\n","import { ZaloApiError } from \"../Errors/ZaloApiError\";\nimport { apiFactory } from \"../utils\";\n\nexport type AcceptFriendRequestResponse = \"\";\n\nexport const acceptFriendRequestFactory = apiFactory<AcceptFriendRequestResponse>()((api, ctx, utils) => {\n const serviceURL = utils.makeURL(`${api.zpwServiceMap.friend[0]}/api/friend/accept`);\n\n /**\n * Accept a friend request from a User\n *\n * @param friendId The friend ID to user request is accept\n *\n * @throws {ZaloApiError}\n */\n return async function acceptFriendRequest(friendId: string) {\n const params = {\n fid: friendId,\n language: ctx.language,\n };\n\n const encryptedParams = utils.encodeAES(JSON.stringify(params));\n if (!encryptedParams) throw new ZaloApiError(\"Failed to encrypt params\");\n\n const response = await utils.request(serviceURL, {\n method: \"POST\",\n body: new URLSearchParams({\n params: encryptedParams,\n }),\n });\n\n return utils.resolve(response);\n };\n});\n","import castArray from \"lodash/castArray\";\nimport { ZaloApiError } from \"../Errors/ZaloApiError\";\nimport { apiFactory } from \"../utils\";\n\nexport type AddGroupBlockedMemberResponse = \"\";\n\nexport const addGroupBlockedMemberFactory = apiFactory<AddGroupBlockedMemberResponse>()((api, _, utils) => {\n const serviceURL = utils.makeURL(`${api.zpwServiceMap.group[0]}/api/group/blockedmems/add`);\n\n /**\n * Add group blocked member\n *\n * @param memberId member id(s)\n * @param groupId group id\n *\n * @throws {ZaloApiError}\n */\n return async function addGroupBlockedMember(memberId: string | string[], groupId: string) {\n const memberIds = castArray(memberId);\n\n const params = {\n grid: groupId,\n members: memberIds,\n };\n\n const encryptedParams = utils.encodeAES(JSON.stringify(params));\n if (!encryptedParams) throw new ZaloApiError(\"Failed to encrypt params\");\n\n const response = await utils.request(utils.makeURL(serviceURL, { params: encryptedParams }), {\n method: \"GET\",\n });\n\n return utils.resolve(response);\n };\n});\n","import castArray from \"lodash/castArray\";\nimport { ZaloApiError } from \"../Errors/ZaloApiError\";\nimport { apiFactory } from \"../utils\";\n\nexport type AddGroupDeputyResponse = \"\";\n\nexport const addGroupDeputyFactory = apiFactory<AddGroupDeputyResponse>()((api, ctx, utils) => {\n const serviceURL = utils.makeURL(`${api.zpwServiceMap.group[0]}/api/group/admins/add`);\n\n /**\n * Add group deputy\n *\n * @param memberId user Id or list of user Ids\n * @param groupId group Id\n *\n * @throws {ZaloApiError}\n *\n */\n return async function addGroupDeputy(memberId: string | string[], groupId: string) {\n const memberIds = castArray(memberId);\n\n const params = {\n grid: groupId,\n members: memberIds,\n imei: ctx.imei,\n };\n\n const encryptedParams = utils.encodeAES(JSON.stringify(params));\n if (!encryptedParams) throw new ZaloApiError(\"Failed to encrypt params\");\n\n const response = await utils.request(utils.makeURL(serviceURL, { params: encryptedParams }), {\n method: \"GET\",\n });\n\n return utils.resolve(response);\n };\n});\n","import { ZaloApiError } from \"../Errors/ZaloApiError\";\nimport type { PollOptions } from \"../models/index\";\nimport { apiFactory } from \"../utils\";\n\nexport type AddPollOptionsOption = {\n voted: boolean;\n content: string;\n};\n\nexport type AddPollOptionsPayload = {\n pollId: number;\n options: AddPollOptionsOption[];\n votedOptionIds: number[];\n};\n\nexport type AddPollOptionsResponse = {\n options: PollOptions[];\n};\n\nexport const addPollOptionsFactory = apiFactory<AddPollOptionsResponse>()((api, _ctx, utils) => {\n const serviceURL = utils.makeURL(`${api.zpwServiceMap.group[0]}/api/poll/option/add`);\n\n /**\n * Add new option to poll\n *\n * @param payload\n *\n * @throws {ZaloApiError}\n */\n return async function addPollOptions(payload: AddPollOptionsPayload) {\n const params = {\n poll_id: payload.pollId,\n new_options: JSON.stringify(payload.options),\n voted_option_ids: payload.votedOptionIds,\n };\n\n const encryptedParams = utils.encodeAES(JSON.stringify(params));\n if (!encryptedParams) throw new ZaloApiError(\"Failed to encrypt params\");\n\n const response = await utils.request(utils.makeURL(serviceURL, { params: encryptedParams }), {\n method: \"GET\",\n });\n\n return utils.resolve(response);\n };\n});\n","import { ZaloApiError } from \"../Errors/ZaloApiError\";\nimport type { QuickMessage, AttachmentSource } from \"../models/index\";\nimport { apiFactory } from \"../utils\";\n\nexport type AddQuickMessagePayload = {\n keyword: string;\n title: string;\n media?: AttachmentSource;\n};\n\nexport type AddQuickMessageResponse = {\n item: QuickMessage;\n version: number;\n};\n\nexport const addQuickMessageFactory = apiFactory<AddQuickMessageResponse>()((api, ctx, utils) => {\n const serviceURL = utils.makeURL(`${api.zpwServiceMap.quick_message[0]}/api/quickmessage/create`);\n\n /**\n * Add quick message\n *\n * @param addPayload - The payload containing data to add the quick message\n *\n * @note Zalo might throw an error with code 821 if you have reached the limit of quick messages.\n *\n * @throws {ZaloApiError}\n */\n return async function addQuickMessage(addPayload: AddQuickMessagePayload) {\n const isType = !addPayload.media ? 0 : 1;\n\n const params: Record<string, unknown> = {\n keyword: addPayload.keyword,\n message: {\n title: addPayload.title,\n params: \"\",\n },\n type: isType,\n imei: ctx.imei,\n };\n\n if (isType === 1) {\n if (!addPayload.media) throw new ZaloApiError(\"Media is required\");\n const uploadMedia = await api.uploadProductPhoto({\n file: addPayload.media,\n });\n\n const photoId = uploadMedia.photoId;\n const thumbUrl = uploadMedia.thumbUrl;\n const normalUrl = uploadMedia.normalUrl;\n const hdUrl = uploadMedia.hdUrl;\n\n params.media = {\n items: [\n {\n type: 0,\n photoId: photoId,\n title: \"\",\n width: \"\",\n height: \"\",\n previewThumb: thumbUrl,\n rawUrl: normalUrl || hdUrl,\n thumbUrl: thumbUrl,\n normalUrl: normalUrl || hdUrl,\n hdUrl: hdUrl || normalUrl,\n },\n ],\n };\n }\n\n const encryptedParams = utils.encodeAES(JSON.stringify(params));\n if (!encryptedParams) throw new ZaloApiError(\"Failed to encrypt params\");\n\n const response = await utils.request(utils.makeURL(serviceURL, { params: encryptedParams }), {\n method: \"GET\",\n });\n\n return utils.resolve(response);\n };\n});\n","import { ZaloApiError } from \"../Errors/ZaloApiError\";\nimport { ThreadType, Reactions } from \"../models/index\";\nimport { apiFactory } from \"../utils\";\n\nexport type AddReactionResponse = {\n msgIds: number[];\n};\n\nexport type CustomReaction = {\n rType: number;\n source: number;\n icon: string;\n};\n\nexport type AddReactionDestination = {\n data: {\n msgId: string;\n cliMsgId: string;\n };\n threadId: string;\n type: ThreadType;\n};\n\nexport const addReactionFactory = apiFactory<AddReactionResponse>()((api, ctx, utils) => {\n const serviceURLs = {\n [ThreadType.User]: utils.makeURL(`${api.zpwServiceMap.reaction[0]}/api/message/reaction`),\n [ThreadType.Group]: utils.makeURL(`${api.zpwServiceMap.reaction[0]}/api/group/reaction`),\n };\n\n /**\n * Add reaction to a message\n *\n * @param icon Reaction icon\n * @param dest Destination data including message IDs and thread information\n *\n * @throws {ZaloApiError}\n */\n return async function addReaction(icon: Reactions | CustomReaction, dest: AddReactionDestination) {\n const serviceURL = serviceURLs[dest.type];\n let rType, source;\n\n if (typeof icon == \"object\") {\n rType = icon.rType;\n source = icon.source;\n } else\n switch (icon) {\n case Reactions.HAHA:\n rType = 0;\n source = 6;\n break;\n case Reactions.LIKE:\n rType = 3;\n source = 6;\n break;\n case Reactions.HEART:\n rType = 5;\n source = 6;\n break;\n case Reactions.WOW:\n rType = 32;\n source = 6;\n break;\n case Reactions.CRY:\n rType = 2;\n source = 6;\n break;\n case Reactions.ANGRY:\n rType = 20;\n source = 6;\n break;\n case Reactions.KISS:\n rType = 8;\n source = 6;\n break;\n case Reactions.TEARS_OF_JOY:\n rType = 7;\n source = 6;\n break;\n case Reactions.SHIT:\n rType = 66;\n source = 6;\n break;\n case Reactions.ROSE:\n rType = 120;\n source = 6;\n break;\n case Reactions.BROKEN_HEART:\n rType = 65;\n source = 6;\n break;\n case Reactions.DISLIKE:\n rType = 4;\n source = 6;\n break;\n case Reactions.LOVE:\n rType = 29;\n source = 6;\n break;\n case Reactions.CONFUSED:\n rType = 51;\n source = 6;\n break;\n case Reactions.WINK:\n rType = 45;\n source = 6;\n break;\n case Reactions.FADE:\n rType = 121;\n source = 6;\n break;\n case Reactions.SUN:\n rType = 67;\n source = 6;\n break;\n case Reactions.BIRTHDAY:\n rType = 126;\n source = 6;\n break;\n case Reactions.BOMB:\n rType = 127;\n source = 6;\n break;\n case Reactions.OK:\n rType = 68;\n source = 6;\n break;\n case Reactions.PEACE:\n rType = 69;\n source = 6;\n break;\n case Reactions.THANKS:\n rType = 70;\n source = 6;\n break;\n case Reactions.PUNCH:\n rType = 71;\n source = 6;\n break;\n case Reactions.SHARE:\n rType = 72;\n source = 6;\n break;\n case Reactions.PRAY:\n rType = 73;\n source = 6;\n break;\n case Reactions.NO:\n rType = 131;\n source = 6;\n break;\n case Reactions.BAD:\n rType = 132;\n source = 6;\n break;\n case Reactions.LOVE_YOU:\n rType = 133;\n source = 6;\n break;\n case Reactions.SAD:\n rType = 1;\n source = 6;\n break;\n case Reactions.VERY_SAD:\n rType = 16;\n source = 6;\n break;\n case Reactions.COOL:\n rType = 21;\n source = 6;\n break;\n case Reactions.NERD:\n rType = 22;\n source = 6;\n break;\n case Reactions.BIG_SMILE:\n rType = 23;\n source = 6;\n break;\n case Reactions.SUNGLASSES:\n rType = 26;\n source = 6;\n break;\n case Reactions.NEUTRAL:\n rType = 30;\n source = 6;\n break;\n case Reactions.SAD_FACE:\n rType = 35;\n source = 6;\n break;\n case Reactions.BYE:\n rType = 36;\n source = 6;\n break;\n case Reactions.SLEEPY:\n rType = 38;\n source = 6;\n break;\n case Reactions.WIPE:\n rType = 39;\n source = 6;\n break;\n case Reactions.DIG:\n rType = 42;\n source = 6;\n break;\n case Reactions.ANGUISH:\n rType = 44;\n source = 6;\n break;\n case Reactions.HANDCLAP:\n rType = 46;\n source = 6;\n break;\n case Reactions.ANGRY_FACE:\n rType = 47;\n source = 6;\n break;\n case Reactions.F_CHAIR:\n rType = 48;\n source = 6;\n break;\n case Reactions.L_CHAIR:\n rType = 49;\n source = 6;\n break;\n case Reactions.R_CHAIR:\n rType = 50;\n source = 6;\n break;\n case Reactions.SILENT:\n rType = 52;\n source = 6;\n break;\n case Reactions.SURPRISE:\n rType = 53;\n source = 6;\n break;\n case Reactions.EMBARRASSED:\n rType = 54;\n source = 6;\n break;\n case Reactions.AFRAID:\n rType = 60;\n source = 6;\n break;\n case Reactions.SAD2:\n rType = 61;\n source = 6;\n break;\n case Reactions.BIG_LAUGH:\n rType = 62;\n source = 6;\n break;\n case Reactions.RICH:\n rType = 63;\n source = 6;\n break;\n case Reactions.BEER:\n rType = 99;\n source = 6;\n break;\n default:\n rType = -1;\n source = 6;\n }\n\n const rIcon = typeof icon == \"object\" ? icon.icon : icon;\n\n if (rType == undefined || source == undefined || rIcon == undefined) {\n throw new ZaloApiError(\"Invalid reaction\");\n }\n\n const params: Record<string, unknown> = {\n react_list: [\n {\n message: JSON.stringify({\n rMsg: [\n {\n gMsgID: parseInt(dest.data.msgId),\n cMsgID: parseInt(dest.data.cliMsgId),\n msgType: 1,\n },\n ],\n rIcon,\n rType,\n source,\n }),\n clientId: Date.now(),\n },\n ],\n };\n\n if (dest.type == ThreadType.User) {\n params.toid = dest.threadId;\n } else {\n params.grid = dest.threadId;\n params.imei = ctx.imei;\n }\n\n const encryptedParams = utils.encodeAES(JSON.stringify(params));\n if (!encryptedParams) throw new ZaloApiError(\"Failed to encrypt message\");\n\n const response = await utils.request(serviceURL, {\n method: \"POST\",\n body: new URLSearchParams({\n params: encryptedParams,\n }),\n });\n\n return utils.resolve(response, (result) => {\n if (typeof (result.data as { msgIds: unknown }).msgIds === \"string\") {\n return {\n msgIds: JSON.parse((result.data as { msgIds: string }).msgIds),\n };\n }\n\n return result.data as AddReactionResponse;\n });\n };\n});\n","import { ZaloApiError } from \"../Errors/ZaloApiError\";\nimport { ThreadType } from \"../models/index\";\nimport { apiFactory } from \"../utils\";\n\nexport type AddUnreadMarkResponse = {\n data: {\n updateId: number;\n };\n status: number;\n};\n\nexport const addUnreadMarkFactory = apiFactory<AddUnreadMarkResponse>()((api, ctx, utils) => {\n const serviceURL = utils.makeURL(`${api.zpwServiceMap.conversation[0]}/api/conv/addUnreadMark`);\n\n /**\n * Add unread mark to conversation\n *\n * @param threadId Thread ID\n * @param type Thread type (User/Group)\n *\n * @throws {ZaloApiError}\n */\n return async function addUnreadMark(threadId: string, type: ThreadType = ThreadType.User) {\n const timestamp = Date.now();\n const timestampString = timestamp.toString();\n const isGroup = type === ThreadType.Group;\n\n const requestParams = {\n param: JSON.stringify({\n [isGroup ? \"convsGroup\" : \"convsUser\"]: [\n {\n id: threadId,\n cliMsgId: timestampString,\n fromUid: \"0\",\n ts: timestamp,\n },\n ],\n [isGroup ? \"convsUser\" : \"convsGroup\"]: [],\n imei: ctx.imei,\n }),\n };\n\n const encryptedParams = utils.encodeAES(JSON.stringify(requestParams));\n if (!encryptedParams) throw new ZaloApiError(\"Failed to encrypt params\");\n\n const response = await utils.request(serviceURL, {\n method: \"POST\",\n body: new URLSearchParams({\n params: encryptedParams,\n }),\n });\n\n return utils.resolve(response, (result) => {\n const data = result.data as { data: unknown; status: number };\n if (typeof data.data === \"string\") {\n return {\n data: JSON.parse(data.data),\n status: data.status,\n };\n }\n\n return result.data as AddUnreadMarkResponse;\n });\n };\n});\n","import { ZaloApiError } from \"../Errors/ZaloApiError\";\nimport castArray from \"lodash/castArray\";\n\nimport { apiFactory } from \"../utils\";\n\nexport type AddUserToGroupResponse = {\n errorMembers: string[];\n error_data: Record<string, string[]>;\n};\n\nexport const addUserToGroupFactory = apiFactory<AddUserToGroupResponse>()((api, ctx, utils) => {\n const serviceURL = utils.makeURL(`${api.zpwServiceMap.group[0]}/api/group/invite/v2`);\n\n /**\n * Add user to existing group\n *\n * @param memberId User ID or list of user IDs to add\n * @param groupId Group ID\n *\n * @throws {ZaloApiError}\n */\n return async function addUserToGroup(memberId: string | string[], groupId: string) {\n const memberIds = castArray(memberId);\n\n const params = {\n grid: groupId,\n members: memberIds,\n memberTypes: memberIds.map(() => -1),\n imei: ctx.imei,\n clientLang: ctx.language,\n };\n\n const encryptedParams = utils.encodeAES(JSON.stringify(params));\n if (!encryptedParams) throw new ZaloApiError(\"Failed to encrypt params\");\n\n const response = await utils.request(serviceURL, {\n method: \"POST\",\n body: new URLSearchParams({\n params: encryptedParams,\n }),\n });\n\n return utils.resolve(response);\n };\n});\n","import { ZaloApiError } from \"../Errors/ZaloApiError\";\nimport { apiFactory } from \"../utils\";\n\nexport type BlockUserResponse = \"\";\n\nexport const blockUserFactory = apiFactory<BlockUserResponse>()((api, ctx, utils) => {\n const serviceURL = utils.makeURL(`${api.zpwServiceMap.friend[0]}/api/friend/block`);\n\n /**\n * Block a User\n *\n * @param userId The ID of the User to block\n *\n * @throws {ZaloApiError}\n */\n return async function blockUser(userId: string) {\n const params = {\n fid: userId,\n imei: ctx.imei,\n };\n\n const encryptedParams = utils.encodeAES(JSON.stringify(params));\n if (!encryptedParams) throw new ZaloApiError(\"Failed to encrypt params\");\n\n const response = await utils.request(serviceURL, {\n method: \"POST\",\n body: new URLSearchParams({\n params: encryptedParams,\n }),\n });\n\n return utils.resolve(response);\n };\n});\n","import { ZaloApiError } from \"../Errors/ZaloApiError\";\nimport { apiFactory } from \"../utils\";\n\nexport type BlockViewFeedResponse = \"\";\n\nexport const blockViewFeedFactory = apiFactory<BlockViewFeedResponse>()((api, ctx, utils) => {\n const serviceURL = utils.makeURL(`${api.zpwServiceMap.friend[0]}/api/friend/feed/block`);\n\n /**\n * Block/Unblock friend view feed by ID\n *\n * @param isBlockFeed Boolean to block/unblock view feed\n * @param userId User ID to block/unblock view feed\n *\n * @throws {ZaloApiError}\n */\n return async function blockViewFeed(isBlockFeed: boolean, userId: string) {\n const params = {\n fid: userId,\n isBlockFeed: isBlockFeed ? 1 : 0,\n imei: ctx.imei,\n };\n\n const encryptedParams = utils.encodeAES(JSON.stringify(params));\n if (!encryptedParams) throw new ZaloApiError(\"Failed to encrypt params\");\n\n const response = await utils.request(serviceURL, {\n method: \"POST\",\n body: new URLSearchParams({\n params: encryptedParams,\n }),\n });\n\n return utils.resolve(response);\n };\n});\n","import FormData from \"form-data\";\nimport fs from \"node:fs\";\nimport { ZaloApiError } from \"../Errors/ZaloApiError\";\nimport type { AttachmentSource } from \"../models/index\";\nimport { apiFactory, formatTime, getImageMetaData } from \"../utils\";\n\nexport type ChangeAccountAvatarResponse = \"\";\n\nexport const changeAccountAvatarFactory = apiFactory<ChangeAccountAvatarResponse>()((api, ctx, utils) => {\n const serviceURL = utils.makeURL(`${api.zpwServiceMap.file[0]}/api/profile/upavatar`);\n\n /**\n * Change account avatar\n *\n * @param avatarSource Attachment source, can be a file path or an Attachment object\n *\n * @throws {ZaloApiError | ZaloApiMissingImageMetadataGetter}\n */\n return async function changeAccountAvatar(avatarSource: AttachmentSource) {\n const isSourceFilePath = typeof avatarSource == \"string\";\n const imageMetaData = isSourceFilePath ? await getImageMetaData(ctx, avatarSource) : avatarSource.metadata;\n\n const fileSize = imageMetaData.totalSize || 0;\n\n const params = {\n avatarSize: 120,\n clientId: String(ctx.uid + formatTime(\"%H:%M %d/%m/%Y\")),\n language: ctx.language,\n metaData: JSON.stringify({\n origin: {\n width: imageMetaData.width || 1080,\n height: imageMetaData.height || 1080,\n },\n processed: {\n width: imageMetaData.width || 1080,\n height: imageMetaData.height || 1080,\n size: fileSize,\n },\n }),\n };\n\n const avatarData = isSourceFilePath ? fs.readFileSync(avatarSource) : avatarSource.data;\n const formData = new FormData();\n formData.append(\"fileContent\", avatarData, {\n filename: \"blob\",\n contentType: \"image/jpeg\",\n });\n\n const encryptedParams = utils.encodeAES(JSON.stringify(params));\n if (!encryptedParams) throw new ZaloApiError(\"Failed to encrypt params\");\n\n const response = await utils.request(\n utils.makeURL(serviceURL, {\n params: encryptedParams,\n }),\n {\n method: \"POST\",\n headers: formData.getHeaders(),\n body: formData.getBuffer(),\n },\n );\n\n return utils.resolve(response);\n };\n});\n","import { ZaloApiError } from \"../Errors/ZaloApiError\";\nimport { apiFactory } from \"../utils\";\n\nexport type ChangeFriendAliasResponse = \"\";\n\nexport const changeFriendAliasFactory = apiFactory<ChangeFriendAliasResponse>()((api, ctx, utils) => {\n const serviceURL = utils.makeURL(`${api.zpwServiceMap.alias[0]}/api/alias/update`);\n\n /**\n * Change friend's alias\n *\n * @param alias new alias (nickname - bietdanh)\n * @param friendId friend id\n *\n * @throws {ZaloApiError}\n */\n return async function changeFriendAlias(alias: string, friendId: string) {\n const params = {\n friendId: friendId,\n alias: alias,\n imei: ctx.imei,\n };\n\n const encryptedParams = utils.encodeAES(JSON.stringify(params));\n if (!encryptedParams) throw new ZaloApiError(\"Failed to encrypt params\");\n\n const response = await utils.request(utils.makeURL(serviceURL, { params: encryptedParams }), {\n method: \"GET\",\n });\n\n return utils.resolve(response);\n };\n});\n","import FormData from \"form-data\";\nimport fs from \"node:fs\";\nimport { ZaloApiError } from \"../Errors/ZaloApiError\";\nimport type { AttachmentSource } from \"../models/index\";\nimport { apiFactory, getFullTimeFromMillisecond, getImageMetaData } from \"../utils\";\n\nexport type ChangeGroupAvatarResponse = \"\";\n\nexport const changeGroupAvatarFactory = apiFactory<ChangeGroupAvatarResponse>()((api, ctx, utils) => {\n const serviceURL = utils.makeURL(`${api.zpwServiceMap.file[0]}/api/group/upavatar`);\n\n /**\n * Change group avatar\n *\n * @param avatarSource Attachment source, can be a file path or an Attachment object\n * @param groupId Group ID\n *\n * @throws {ZaloApiError | ZaloApiMissingImageMetadataGetter}\n */\n return async function changeGroupAvatar(avatarSource: AttachmentSource, groupId: string) {\n const params: Record<string, unknown> = {\n grid: groupId,\n avatarSize: 120,\n clientId: `g${groupId}${getFullTimeFromMillisecond(new Date().getTime())}`,\n imei: ctx.imei,\n };\n\n const isSourceFilePath = typeof avatarSource == \"string\";\n const imageMetaData = isSourceFilePath ? await getImageMetaData(ctx, avatarSource) : avatarSource.metadata;\n\n params.originWidth = imageMetaData.width || 1080;\n params.originHeight = imageMetaData.height || 1080;\n\n const avatarData = isSourceFilePath ? fs.readFileSync(avatarSource) : avatarSource.data;\n const formData = new FormData();\n formData.append(\"fileContent\", avatarData, {\n filename: \"blob\",\n contentType: \"image/jpeg\",\n });\n\n const encryptedParams = utils.encodeAES(JSON.stringify(params));\n if (!encryptedParams) throw new ZaloApiError(\"Failed to encrypt params\");\n\n const response = await utils.request(\n utils.makeURL(serviceURL, {\n params: encryptedParams,\n }),\n {\n method: \"POST\",\n headers: formData.getHeaders(),\n body: formData.getBuffer(),\n },\n );\n\n return utils.resolve(response);\n };\n});\n","import { ZaloApiError } from \"../Errors/ZaloApiError\";\nimport { apiFactory } from \"../utils\";\n\nexport type ChangeGroupNameResponse = {\n status: number;\n};\n\nexport const changeGroupNameFactory = apiFactory<ChangeGroupNameResponse>()((api, ctx, utils) => {\n const serviceURL = utils.makeURL(`${api.zpwServiceMap.group[0]}/api/group/updateinfo`);\n\n /**\n * Change group name\n *\n * @param name New group name\n * @param groupId Group ID\n *\n * @throws {ZaloApiError}\n */\n return async function changeGroupName(name: string, groupId: string) {\n if (name.length == 0) name = Date.now().toString();\n\n const params = {\n grid: groupId,\n gname: name,\n imei: ctx.imei,\n };\n\n const encryptedParams = utils.encodeAES(JSON.stringify(params));\n if (!encryptedParams) throw new ZaloApiError(\"Failed to encrypt params\");\n\n const response = await utils.request(serviceURL, {\n method: \"POST\",\n body: new URLSearchParams({\n params: encryptedParams,\n }),\n });\n\n return utils.resolve(response);\n };\n});\n","import { ZaloApiError } from \"../Errors/ZaloApiError\";\nimport { apiFactory } from \"../utils\";\n\nexport type ChangeGroupOwnerResponse = {\n time: number;\n};\n\nexport const changeGroupOwnerFactory = apiFactory<ChangeGroupOwnerResponse>()((api, ctx, utils) => {\n const serviceURL = utils.makeURL(`${api.zpwServiceMap.group[0]}/api/group/change-owner`);\n\n /**\n * Change group owner\n *\n * @param memberId User Id of new group owner\n * @param groupId Group Id\n * @note Be careful when changing the key, as it will result in losing group admin rights\n *\n * @throws {ZaloApiError}\n *\n */\n return async function changeGroupOwner(memberId: string, groupId: string) {\n const params = {\n grid: groupId,\n newAdminId: memberId,\n imei: ctx.imei,\n language: ctx.language,\n };\n\n const encryptedParams = utils.encodeAES(JSON.stringify(params));\n if (!encryptedParams) throw new ZaloApiError(\"Failed to encrypt params\");\n\n const response = await utils.request(utils.makeURL(serviceURL, { params: encryptedParams }), {\n method: \"GET\",\n });\n\n return utils.resolve(response);\n };\n});\n","import { ZaloApiError } from \"../Errors/ZaloApiError\";\nimport castArray from \"lodash/castArray\";\n\nimport { apiFactory } from \"../utils\";\n\nimport type { AutoReplyItem, AutoReplyScope } from \"../models/index\";\n\nexport type CreateAutoReplyPayload = {\n content: string;\n isEnable: boolean;\n startTime: number;\n endTime: number;\n scope: AutoReplyScope;\n uids?: string | string[];\n};\n\nexport type CreateAutoReplyResponse = {\n item: AutoReplyItem;\n version: number;\n};\n\nexport const createAutoReplyFactory = apiFactory<CreateAutoReplyResponse>()((api, ctx, utils) => {\n const serviceURL = utils.makeURL(`${api.zpwServiceMap.auto_reply[0]}/api/autoreply/create`);\n\n /**\n * Create auto reply\n *\n * @param payload payload\n *\n * @note this API used for zBusiness\n * @throws {ZaloApiError}\n */\n return async function createAutoReply(payload: CreateAutoReplyPayload) {\n const uids = castArray(payload.uids || []);\n const resultUids = (payload.scope === 2 || payload.scope === 3) ? uids : [];\n\n const params = {\n cliLang: ctx.language,\n enable: payload.isEnable,\n content: payload.content,\n startTime: payload.startTime,\n endTime: payload.endTime,\n recurrence: [\"RRULE:FREQ=DAILY;\"],\n scope: payload.scope,\n uids: resultUids,\n };\n\n const encryptedParams = utils.encodeAES(JSON.stringify(params));\n if (!encryptedParams) throw new ZaloApiError(\"Failed to encrypt params\");\n\n const response = await utils.request(serviceURL, {\n method: \"POST\",\n body: new URLSearchParams({\n params: encryptedParams,\n }),\n });\n\n return utils.resolve(response);\n };\n});\n","import { ZaloApiError } from \"../Errors/ZaloApiError\";\nimport { apiFactory } from \"../utils\";\n\nimport type { CatalogItem } from \"../models/index\";\n\nexport type CreateCatalogResponse = {\n item: CatalogItem;\n version_ls_catalog: number;\n version_catalog: number;\n};\n\nexport const createCatalogFactory = apiFactory<CreateCatalogResponse>()((api, _, utils) => {\n const serviceURL = utils.makeURL(`${api.zpwServiceMap.catalog[0]}/api/prodcatalog/catalog/create`);\n\n /**\n * Create catalog?\n *\n * @param catalogName catalog name\n *\n * @note this API is used for zBusiness\n * @throws {ZaloApiError}\n */\n return async function createCatalog(catalogName: string) {\n const params = {\n catalog_name: catalogName,\n catalog_photo: \"\",\n };\n\n const encryptedParams = utils.encodeAES(JSON.stringify(params));\n if (!encryptedParams) throw new ZaloApiError(\"Failed to encrypt params\");\n\n const response = await utils.request(serviceURL, {\n method: \"POST\",\n body: new URLSearchParams({\n params: encryptedParams,\n }),\n });\n\n return utils.resolve(response);\n };\n});\n","import { ZaloApiError } from \"../Errors/ZaloApiError\";\nimport type { AttachmentSource } from \"../models/index\";\nimport { apiFactory } from \"../utils\";\n\nexport type CreateGroupResponse = {\n groupType: number;\n sucessMembers: string[];\n groupId: string;\n errorMembers: string[];\n error_data: Record<string, unknown>;\n};\n\nexport type CreateGroupOptions = {\n /**\n * Group name\n */\n name?: string;\n /**\n * List of member IDs to add to the group\n */\n members: string[];\n /**\n * Avatar source, can be a file path or an Attachment object\n */\n avatarSource?: AttachmentSource;\n /**\n * Path to the avatar image file\n * @deprecated Use `avatarSource` instead\n */\n avatarPath?: string;\n};\n\nexport const createGroupFactory = apiFactory<CreateGroupResponse>()((api, ctx, utils) => {\n const serviceURL = utils.makeURL(`${api.zpwServiceMap.group[0]}/api/group/create/v2`);\n\n /**\n * Create a new group\n *\n * @param options Group options\n *\n * @throws {ZaloApiError}\n */\n return async function createGroup(options: CreateGroupOptions) {\n if (options.members.length == 0) throw new ZaloApiError(\"Group must have at least one member\");\n\n const params = {\n clientId: Date.now(),\n gname: String(Date.now()),\n gdesc: null,\n members: options.members,\n membersTypes: options.members.map(() => -1),\n nameChanged: 0,\n createLink: 1,\n clientLang: ctx.language,\n imei: ctx.imei,\n zsource: 601,\n };\n\n if (options.name && options.name.length > 0) {\n params.gname = options.name;\n params.nameChanged = 1;\n }\n\n const encryptedParams = utils.encodeAES(JSON.stringify(params));\n if (!encryptedParams) throw new ZaloApiError(\"Failed to encrypt message\");\n\n const response = await utils.request(utils.makeURL(serviceURL, { params: encryptedParams }), {\n method: \"POST\",\n });\n\n const data = await utils.resolve(response);\n options.avatarSource = options.avatarSource || options.avatarPath;\n if (options.avatarSource) await api.changeGroupAvatar(options.avatarSource, data.groupId).catch(utils.logger.error);\n\n return data;\n };\n});\n","import { ZaloApiError } from \"../Errors/ZaloApiError\";\nimport type { NoteDetail } from \"../models/index\";\nimport { apiFactory } from \"../utils\";\n\nexport type CreateNoteOptions = {\n title: string;\n pinAct?: boolean;\n};\n\nexport type CreateNoteResponse = NoteDetail;\n\nexport const createNoteFactory = apiFactory<CreateNoteResponse>()((api, ctx, utils) => {\n const serviceURL = utils.makeURL(`${api.zpwServiceMap.group_board[0]}/api/board/topic/createv2`);\n\n /**\n * Create a note in a group\n *\n * @param options note options\n * @param options.title note title\n * @param options.pinAct pin action (pin note)\n * @param groupId group id\n *\n * @throws {ZaloApiError}\n */\n return async function createNote(options: CreateNoteOptions, groupId: string) {\n const params = {\n grid: groupId,\n type: 0,\n color: -16777216,\n emoji: \"\",\n startTime: -1,\n duration: -1,\n params: JSON.stringify({\n title: options.title,\n }),\n repeat: 0,\n src: 1,\n imei: ctx.imei,\n pinAct: options.pinAct ? 1 : 0,\n };\n\n const encryptedParams = utils.encodeAES(JSON.stringify(params));\n if (!encryptedParams) throw new ZaloApiError(\"Failed to encrypt params\");\n\n const response = await utils.request(serviceURL, {\n method: \"POST\",\n body: new URLSearchParams({\n params: encryptedParams,\n }),\n });\n\n return utils.resolve(response, (result) => {\n if (typeof (result.data as { params: unknown }).params === \"string\") {\n (result.data as CreateNoteResponse).params = JSON.parse(\n (result.data as { params: string }).params,\n );\n }\n\n return result.data as CreateNoteResponse;\n });\n };\n});\n","import { ZaloApiError } from \"../Errors/ZaloApiError\";\nimport { apiFactory } from \"../utils\";\n\nimport type { PollDetail } from \"../models/index\";\n\n/**\n * Options for creating a poll.\n */\nexport type CreatePollOptions = {\n /**\n * Question for the poll.\n */\n question: string;\n\n /**\n * List of options for the poll.\n */\n options: string[];\n\n /**\n * Poll expiration time in milliseconds (0 = no expiration).\n */\n expiredTime?: number;\n\n /**\n * Allows multiple choices in the poll.\n */\n allowMultiChoices?: boolean;\n\n /**\n * Allows members to add new options to the poll.\n */\n allowAddNewOption?: boolean;\n\n /**\n * Hides voting results until the user has voted.\n */\n hideVotePreview?: boolean;\n\n /**\n * Hides poll voters (anonymous poll).\n */\n isAnonymous?: boolean;\n};\n\nexport type CreatePollResponse = PollDetail;\n\nexport const createPollFactory = apiFactory<CreatePollResponse>()((api, ctx, utils) => {\n const serviceURL = utils.makeURL(`${api.zpwServiceMap.group[0]}/api/poll/create`);\n\n /**\n * Create a poll in a group.\n *\n * @param options Poll options\n * @param groupId Group ID to create poll from\n *\n * @throws {ZaloApiError}\n */\n return async function createPoll(options: CreatePollOptions, groupId: string) {\n const params = {\n group_id: groupId,\n question: options.question,\n options: options.options,\n expired_time: options.expiredTime ?? 0,\n pinAct: false,\n allow_multi_choices: !!options.allowMultiChoices,\n allow_add_new_option: !!options.allowAddNewOption,\n is_hide_vote_preview: !!options.hideVotePreview,\n is_anonymous: !!options.isAnonymous,\n poll_type: 0,\n src: 1,\n imei: ctx.imei,\n };\n\n const encryptedParams = utils.encodeAES(JSON.stringify(params));\n if (!encryptedParams) throw new ZaloApiError(\"Failed to encrypt params\");\n\n const response = await utils.request(serviceURL, {\n method: \"POST\",\n body: new URLSearchParams({\n params: encryptedParams,\n }),\n });\n\n return utils.resolve(response);\n };\n});\n","import { ZaloApiError } from \"../Errors/ZaloApiError\";\nimport { apiFactory } from \"../utils\";\n\nimport type { AttachmentSource, ProductCatalogItem } from \"../models/index\";\n\nexport type CreateProductCatalogPayload = {\n catalogId: string;\n\n productName: string;\n price: string;\n description: string;\n\n /**\n * Upto 5 media files are allowed, will be ignored if product_photos is provided\n */\n files?: AttachmentSource[];\n /**\n * List of product photo URLs, upto 5\n *\n * You can manually get the URL using `uploadProductPhoto` api\n */\n product_photos?: string[];\n};\n\nexport type CreateProductCatalogResponse = {\n item: ProductCatalogItem;\n version_ls_catalog: number;\n version_catalog: number;\n};\n\nexport const createProductCatalogFactory = apiFactory<CreateProductCatalogResponse>()((api, _, utils) => {\n const serviceURL = utils.makeURL(`${api.zpwServiceMap.catalog[0]}/api/prodcatalog/product/create`);\n\n /**\n * Create product catalog?\n *\n * @param payload payload\n *\n * @note this API is used for zBussiness - Maximum 5 media files are supported\n * @throws {ZaloApiError}\n */\n return async function createProductCatalog(payload: CreateProductCatalogPayload) {\n const productPhoto = payload.product_photos || [];\n\n if (payload.files && payload.files.length == 0) {\n if (payload.files.length > 5) {\n throw new ZaloApiError(\"Maximum 5 media files are allowed\");\n }\n\n for (const mediaFile of payload.files) {\n const uploadMedia = await api.uploadProductPhoto({\n file: mediaFile,\n });\n\n const url = uploadMedia.normalUrl || uploadMedia.hdUrl;\n productPhoto.push(url);\n }\n }\n\n if (productPhoto.length > 5) {\n throw new ZaloApiError(\"Maximum 5 media files are allowed\");\n }\n\n const params = {\n product_name: payload.productName,\n price: payload.price,\n description: payload.description,\n product_photos: productPhoto,\n catalog_id: payload.catalogId,\n currency_unit: \"₫\", // $\n create_time: Date.now(),\n };\n\n const encryptedParams = utils.encodeAES(JSON.stringify(params));\n if (!encryptedParams) throw new ZaloApiError(\"Failed to encrypt params\");\n\n const response = await utils.request(serviceURL, {\n method: \"POST\",\n body: new URLSearchParams({\n params: encryptedParams,\n }),\n });\n\n return utils.resolve(response);\n };\n});\n","import { ZaloApiError } from \"../Errors/ZaloApiError\";\nimport type { ReminderGroup, ReminderUser} from \"../models/index\";\nimport { ReminderRepeatMode, ThreadType } from \"../models/index\";\nimport { apiFactory } from \"../utils\";\n\nexport type CreateReminderOptions = {\n title: string;\n emoji?: string;\n startTime?: number;\n repeat?: ReminderRepeatMode;\n};\n\nexport type CreateReminderUser = ReminderUser;\nexport type CreateReminderGroup = Omit<ReminderGroup, \"responseMem\">;\n\nexport type CreateReminderResponse = CreateReminderUser | CreateReminderGroup;\n\nexport const createReminderFactory = apiFactory<CreateReminderResponse>()((api, ctx, utils) => {\n const serviceURL = {\n [ThreadType.User]: utils.makeURL(`${api.zpwServiceMap.group_board[0]}/api/board/oneone/create`),\n [ThreadType.Group]: utils.makeURL(`${api.zpwServiceMap.group_board[0]}/api/board/topic/createv2`),\n };\n\n /**\n * Create a reminder in a group\n *\n * @param options reminder options\n * @param threadId Group ID to create note from\n * @param type Thread type (User or Group)\n *\n * @throws {ZaloApiError}\n */\n return async function createReminder(\n options: CreateReminderOptions,\n threadId: string,\n type: ThreadType = ThreadType.User,\n ): Promise<CreateReminderResponse> {\n const params =\n type === ThreadType.User\n ? {\n objectData: JSON.stringify({\n toUid: threadId,\n type: 0,\n color: -16245706,\n emoji: options.emoji ?? \"⏰\",\n startTime: options.startTime ?? Date.now(),\n duration: -1,\n params: { title: options.title },\n needPin: false,\n repeat: options.repeat ?? ReminderRepeatMode.None,\n creatorUid: ctx.uid, // Note: for some reason, you can put any valid UID here instead of your own and it still works, atleast for mobile\n src: 1,\n }),\n imei: ctx.imei,\n }\n : {\n grid: threadId,\n type: 0,\n color: -16245706,\n emoji: options.emoji ?? \"⏰\",\n startTime: options.startTime ?? Date.now(),\n duration: -1,\n params: JSON.stringify({\n title: options.title,\n }),\n repeat: options.repeat ?? ReminderRepeatMode.None,\n src: 1,\n imei: ctx.imei,\n pinAct: 0,\n };\n\n const encryptedParams = utils.encodeAES(JSON.stringify(params));\n if (!encryptedParams) throw new ZaloApiError(\"Failed to encrypt params\");\n\n const response = await utils.request(serviceURL[type], {\n method: \"POST\",\n body: new URLSearchParams({\n params: encryptedParams,\n }),\n });\n\n return utils.resolve(response);\n };\n});\n","import { ZaloApiError } from \"../Errors/ZaloApiError\";\nimport { apiFactory } from \"../utils\";\n\nexport type DeleteAutoReplyResponse = {\n item: number;\n version: number;\n};\n\nexport const deleteAutoReplyFactory = apiFactory<DeleteAutoReplyResponse>()((api, ctx, utils) => {\n const serviceURL = utils.makeURL(`${api.zpwServiceMap.auto_reply[0]}/api/autoreply/delete`);\n\n /**\n * Delete auto reply\n *\n * @param id id of auto reply\n *\n * @note this API used for zBusiness\n * @throws {ZaloApiError}\n */\n return async function deleteAutoReply(id: number) {\n const params = {\n cliLang: ctx.language,\n id: id,\n };\n\n const encryptedParams = utils.encodeAES(JSON.stringify(params));\n if (!encryptedParams) throw new ZaloApiError(\"Failed to encrypt params\");\n\n const response = await utils.request(serviceURL, {\n method: \"POST\",\n body: new URLSearchParams({\n params: encryptedParams,\n }),\n });\n\n return utils.resolve(response);\n };\n});\n","import { ZaloApiError } from \"../Errors/ZaloApiError\";\nimport castArray from \"lodash/castArray\";\n\nimport { apiFactory } from \"../utils\";\n\nexport type DeleteAvatarResponse = {\n delPhotoIds: string[];\n errMap: {\n [key: string]: {\n err: number;\n };\n };\n};\n\nexport const deleteAvatarFactory = apiFactory<DeleteAvatarResponse>()((api, ctx, utils) => {\n const serviceURL = utils.makeURL(`${api.zpwServiceMap.profile[0]}/api/social/del-avatars`);\n\n /**\n * Delete avatar from avatar list\n *\n * @param photoId avatar photo ID(s) to delete - can be a single string or array of strings\n *\n * @throws {ZaloApiError}\n */\n return async function deleteAvatar(photoId: string | string[]) {\n const photoIds = castArray(photoId);\n const delPhotos = photoIds.map((id) => ({ photoId: id }));\n\n const params = {\n delPhotos: JSON.stringify(delPhotos),\n imei: ctx.imei,\n };\n\n const encryptedParams = utils.encodeAES(JSON.stringify(params));\n if (!encryptedParams) throw new ZaloApiError(\"Failed to encrypt params\");\n\n const response = await utils.request(utils.makeURL(serviceURL, { params: encryptedParams }), {\n method: \"GET\",\n });\n\n return utils.resolve(response);\n };\n});\n","import { ZaloApiError } from \"../Errors/ZaloApiError\";\nimport { apiFactory } from \"../utils\";\n\nexport type DeleteCatalogResponse = \"\";\n\nexport const deleteCatalogFactory = apiFactory<DeleteCatalogResponse>()((api, _, utils) => {\n const serviceURL = utils.makeURL(`${api.zpwServiceMap.catalog[0]}/api/prodcatalog/catalog/delete`);\n\n /**\n * Delete catalog?\n *\n * @param catalogId catalog id\n *\n * @note this API is used for zBusiness\n * @throws {ZaloApiError}\n */\n return async function deleteCatalog(catalogId: string) {\n const params = {\n catalog_id: catalogId,\n };\n\n const encryptedParams = utils.encodeAES(JSON.stringify(params));\n if (!encryptedParams) throw new ZaloApiError(\"Failed to encrypt params\");\n\n const response = await utils.request(serviceURL, {\n method: \"POST\",\n body: new URLSearchParams({\n params: encryptedParams,\n }),\n });\n\n return utils.resolve(response);\n };\n});\n","import { ZaloApiError } from \"../Errors/ZaloApiError\";\nimport { ThreadType } from \"../models/index\";\nimport { apiFactory } from \"../utils\";\n\nexport type DeleteChatResponse = {\n status: number;\n};\n\nexport type DeleteChatLastMessage = {\n /**\n * Last message owner ID to delete backwards\n */\n ownerId: string;\n /**\n * Last message client ID to delete backwards\n */\n cliMsgId: string;\n /**\n * Last message global ID to delete backwards\n */\n globalMsgId: string;\n};\n\nexport const deleteChatFactory = apiFactory<DeleteChatResponse>()((api, ctx, utils) => {\n const serviceURL = {\n [ThreadType.User]: utils.makeURL(`${api.zpwServiceMap.chat[0]}/api/message/deleteconver`, {\n nretry: 0,\n }),\n [ThreadType.Group]: utils.makeURL(`${api.zpwServiceMap.group[0]}/api/group/deleteconver`, {\n nretry: 0,\n }),\n };\n\n /**\n * Delete chat\n *\n * @param lastMessage Last message info\n * @param threadId Thread ID\n * @param type Thread type\n *\n * @throws {ZaloApiError}\n */\n return async function deleteChat(\n lastMessage: DeleteChatLastMessage,\n threadId: string,\n type: ThreadType = ThreadType.User,\n ) {\n const timestampString = Date.now().toString();\n\n const params =\n type === ThreadType.User\n ? {\n toid: threadId,\n cliMsgId: timestampString,\n conver: lastMessage,\n onlyMe: 1,\n imei: ctx.imei,\n }\n : {\n grid: threadId,\n cliMsgId: timestampString,\n conver: lastMessage,\n onlyMe: 1,\n imei: ctx.imei,\n };\n\n const encryptedParams = utils.encodeAES(JSON.stringify(params));\n if (!encryptedParams) throw new ZaloApiError(\"Failed to encrypt params\");\n\n const response = await utils.request(serviceURL[type], {\n method: \"POST\",\n body: new URLSearchParams({\n params: encryptedParams,\n }),\n });\n\n return utils.resolve(response);\n };\n});\n","import { ZaloApiError } from \"../Errors/ZaloApiError\";\nimport castArray from \"lodash/castArray\";\n\nimport { apiFactory } from \"../utils\";\n\nexport type DeleteGroupInviteBoxResponse = {\n delInvitaionIds: string[];\n errMap: {\n [groupId: string]: {\n err: number;\n };\n };\n};\n\nexport const deleteGroupInviteBoxFactory = apiFactory<DeleteGroupInviteBoxResponse>()((api, _, utils) => {\n const serviceURL = utils.makeURL(`${api.zpwServiceMap.group[0]}/api/group/inv-box/mdel-inv`);\n\n /**\n * Delete group invite box\n *\n * @param groupId - The group id\n * @param blockFutureInvite - Whether to block future invites from this group\n *\n * @throws {ZaloApiError}\n */\n return async function deleteGroupInviteBox(groupId: string | string[], blockFutureInvite: boolean = false) {\n const grids = castArray(groupId);\n\n const params = {\n invitations: JSON.stringify(grids.map((grid) => ({ grid }))),\n block: blockFutureInvite ? 1 : 0,\n };\n\n const encryptedParams = utils.encodeAES(JSON.stringify(params));\n if (!encryptedParams) throw new ZaloApiError(\"Failed to encrypt params\");\n\n const response = await utils.request(utils.makeURL(serviceURL, { params: encryptedParams }), {\n method: \"GET\",\n });\n\n return utils.resolve(response);\n };\n});\n","import { ZaloApiError } from \"../Errors/ZaloApiError\";\nimport { ThreadType } from \"../models/index\";\nimport { apiFactory } from \"../utils\";\n\nexport type DeleteMessageResponse = {\n status: number;\n};\n\nexport type DeleteMessageDestination = {\n data: {\n cliMsgId: string;\n msgId: string;\n uidFrom: string;\n };\n threadId: string;\n type?: ThreadType;\n};\n\nexport const deleteMessageFactory = apiFactory<DeleteMessageResponse>()((api, ctx, utils) => {\n const serviceURL = {\n [ThreadType.User]: utils.makeURL(`${api.zpwServiceMap.chat[0]}/api/message/delete`),\n [ThreadType.Group]: utils.makeURL(`${api.zpwServiceMap.group[0]}/api/group/deletemsg`),\n };\n /**\n * Delete a message\n *\n * @param dest Delete target\n * @param onlyMe Delete message for only you\n *\n * @throws {ZaloApiError}\n */\n return async function deleteMessage(dest: DeleteMessageDestination, onlyMe = false) {\n const { threadId, type = ThreadType.User, data } = dest;\n const isGroup = type === ThreadType.Group;\n const isSelf = ctx.uid == data.uidFrom;\n\n if (isSelf && onlyMe === false)\n throw new ZaloApiError(\"To delete your message for everyone, use undo api instead\");\n\n if (!isGroup && onlyMe === false) throw new ZaloApiError(\"Can't delete message for everyone in a private chat\");\n\n const params = {\n [isGroup ? \"grid\" : \"toid\"]: threadId,\n cliMsgId: Date.now(),\n msgs: [\n {\n cliMsgId: data.cliMsgId,\n globalMsgId: data.msgId,\n ownerId: data.uidFrom,\n destId: threadId,\n },\n ],\n onlyMe: onlyMe ? 1 : 0,\n };\n\n if (!isGroup) {\n params.imei = ctx.imei;\n }\n\n const encryptedParams = utils.encodeAES(JSON.stringify(params));\n if (!encryptedParams) throw new ZaloApiError(\"Failed to encrypt message\");\n\n const response = await utils.request(serviceURL[type], {\n method: \"POST\",\n body: new URLSearchParams({\n params: encryptedParams,\n }),\n });\n\n return utils.resolve(response);\n };\n});\n","import { ZaloApiError } from \"../Errors/ZaloApiError\";\nimport castArray from \"lodash/castArray\";\n\nimport { apiFactory } from \"../utils\";\n\nexport type DeleteProductCatalogPayload = {\n productIds: string | string[];\n catalogId: string;\n};\n\nexport type DeleteProductCatalogResponse = {\n item: number[];\n version_ls_catalog: number;\n version_catalog: number;\n};\n\nexport const deleteProductCatalogFactory = apiFactory<DeleteProductCatalogResponse>()((api, _, utils) => {\n const serviceURL = utils.makeURL(`${api.zpwServiceMap.catalog[0]}/api/prodcatalog/product/mdelete`);\n\n /**\n * Delete product catalog?\n *\n * @param payload payload\n *\n * @note this API is used for zBusiness\n * @throws {ZaloApiError}\n */\n return async function deleteProductCatalog(payload: DeleteProductCatalogPayload) {\n const productIds = castArray(payload.productIds);\n\n const params = {\n product_ids: productIds,\n catalog_id: payload.catalogId,\n };\n\n const encryptedParams = utils.encodeAES(JSON.stringify(params));\n if (!encryptedParams) throw new ZaloApiError(\"Failed to encrypt params\");\n\n const response = await utils.request(serviceURL, {\n method: \"POST\",\n body: new URLSearchParams({\n params: encryptedParams,\n }),\n });\n\n return utils.resolve(response);\n };\n});\n","import { ZaloApiError } from \"../Errors/ZaloApiError\";\nimport { apiFactory } from \"../utils\";\n\nexport type DisableGroupLinkResponse = \"\";\n\nexport const disableGroupLinkFactory = apiFactory<DisableGroupLinkResponse>()((api, _ctx, utils) => {\n const serviceURL = utils.makeURL(`${api.zpwServiceMap.group[0]}/api/group/link/disable`);\n\n /**\n * Disable group link\n *\n * @param groupId The group id\n *\n * @throws {ZaloApiError}\n */\n return async function disableGroupLink(groupId: string) {\n const params = {\n grid: groupId,\n };\n\n const encryptedParams = utils.encodeAES(JSON.stringify(params));\n if (!encryptedParams) throw new ZaloApiError(\"Failed to encrypt params\");\n\n const response = await utils.request(utils.makeURL(serviceURL, { params: encryptedParams }), {\n method: \"GET\",\n });\n\n return utils.resolve(response);\n };\n});\n","import { ZaloApiError } from \"../Errors/ZaloApiError\";\nimport { apiFactory } from \"../utils\";\n\nexport type DisperseGroupResponse = \"\";\n\nexport const disperseGroupFactory = apiFactory<DisperseGroupResponse>()((api, ctx, utils) => {\n const serviceURL = utils.makeURL(`${api.zpwServiceMap.group[0]}/api/group/disperse`);\n\n /**\n * Disperse Group\n *\n * @param groupId Group ID to disperse Group from\n *\n * @throws {ZaloApiError}\n */\n return async function disperseGroup(groupId: string) {\n const params = {\n grid: groupId,\n imei: ctx.imei,\n };\n\n const encryptedParams = utils.encodeAES(JSON.stringify(params));\n if (!encryptedParams) throw new ZaloApiError(\"Failed to encrypt params\");\n\n const response = await utils.request(serviceURL, {\n method: \"POST\",\n body: new URLSearchParams({\n params: encryptedParams,\n }),\n });\n\n return utils.resolve(response);\n };\n});\n","import { ZaloApiError } from \"../Errors/ZaloApiError\";\nimport { apiFactory } from \"../utils\";\n\nimport type { NoteDetail } from \"../models/index\";\n\nexport type EditNoteOptions = {\n /**\n * New note title\n */\n title: string;\n /**\n * Topic ID to edit note from\n */\n topicId: string;\n /**\n * Should the note be pinned?\n */\n pinAct?: boolean;\n};\n\nexport type EditNoteResponse = NoteDetail;\n\nexport const editNoteFactory = apiFactory<EditNoteResponse>()((api, ctx, utils) => {\n const serviceURL = utils.makeURL(`${api.zpwServiceMap.group_board[0]}/api/board/topic/updatev2`);\n\n /**\n * Edit an existing note in a group\n *\n * @param options Options for editing the note\n * @param groupId Group ID to create note from\n *\n * @throws {ZaloApiError}\n */\n return async function editNote(options: EditNoteOptions, groupId: string) {\n const params = {\n grid: groupId,\n type: 0,\n color: -16777216,\n emoji: \"\",\n startTime: -1,\n duration: -1,\n params: JSON.stringify({\n title: options.title,\n }),\n topicId: options.topicId,\n repeat: 0,\n imei: ctx.imei,\n pinAct: options.pinAct ? 1 : 2,\n };\n\n const encryptedParams = utils.encodeAES(JSON.stringify(params));\n if (!encryptedParams) throw new ZaloApiError(\"Failed to encrypt params\");\n\n const response = await utils.request(serviceURL, {\n method: \"POST\",\n body: new URLSearchParams({\n params: encryptedParams,\n }),\n });\n\n return utils.resolve(response, (result) => {\n const data = result.data as Omit<NoteDetail, \"params\"> & { params: unknown };\n if (typeof data.params == \"string\") {\n data.params = JSON.parse(data.params);\n }\n\n return data as NoteDetail;\n });\n };\n});\n","import { ZaloApiError } from \"../Errors/ZaloApiError\";\nimport type { ReminderRepeatMode, ReminderGroup, ReminderUser} from \"../models/index\";\nimport { ThreadType } from \"../models/index\";\nimport { apiFactory } from \"../utils\";\n\nexport type EditReminderOptions = {\n title: string;\n topicId: string;\n emoji?: string;\n startTime?: number;\n repeat?: ReminderRepeatMode;\n};\n\nexport type EditReminderUser = ReminderUser;\nexport type EditReminderGroup = Omit<ReminderGroup, \"responseMem\">;\n\nexport type EditReminderResponse = EditReminderUser | EditReminderGroup;\n\nexport const editReminderFactory = apiFactory<EditReminderResponse>()((api, ctx, utils) => {\n const serviceURL = {\n [ThreadType.User]: utils.makeURL(`${api.zpwServiceMap.group_board[0]}/api/board/oneone/update`),\n [ThreadType.Group]: utils.makeURL(`${api.zpwServiceMap.group_board[0]}/api/board/topic/updatev2`),\n };\n\n /**\n * Edit an existing reminder\n *\n * @param options Reminder parameters\n * @param threadId Thread ID\n * @param type Thread type (User/Group)\n *\n * @throws {ZaloApiError}\n */\n return async function editReminder(\n options: EditReminderOptions,\n threadId: string,\n type: ThreadType = ThreadType.User,\n ) {\n const requestParams =\n type === ThreadType.User\n ? {\n objectData: JSON.stringify({\n toUid: threadId,\n type: 0,\n color: -16777216,\n emoji: options.emoji ?? \"\",\n startTime: options.startTime ?? Date.now(),\n duration: -1,\n params: { title: options.title },\n needPin: false,\n reminderId: options.topicId,\n repeat: options.repeat ?? 0,\n }),\n }\n : {\n grid: threadId,\n type: 0,\n color: -16777216,\n emoji: options.emoji ?? \"\",\n startTime: options.startTime ?? Date.now(),\n duration: -1,\n params: JSON.stringify({\n title: options.title,\n }),\n topicId: options.topicId,\n repeat: options.repeat ?? 0,\n imei: ctx.imei,\n pinAct: 2,\n };\n\n const encryptedParams = utils.encodeAES(JSON.stringify(requestParams));\n if (!encryptedParams) throw new ZaloApiError(\"Failed to encrypt params\");\n\n const response = await utils.request(serviceURL[type], {\n method: \"POST\",\n body: new URLSearchParams({\n params: encryptedParams,\n }),\n });\n\n return utils.resolve(response);\n };\n});\n","import { ZaloApiError } from \"../Errors/ZaloApiError\";\nimport { apiFactory } from \"../utils\";\n\nexport type EnableGroupLinkResponse = {\n link: string;\n expiration_date: number;\n enabled: number;\n};\n\nexport const enableGroupLinkFactory = apiFactory<EnableGroupLinkResponse>()((api, ctx, utils) => {\n const serviceURL = utils.makeURL(`${api.zpwServiceMap.group[0]}/api/group/link/new`);\n\n /**\n * Enable and create new group link\n *\n * @param groupId The group id\n *\n * @throws {ZaloApiError}\n */\n return async function enableGroupLink(groupId: string) {\n const params = {\n grid: groupId,\n imei: ctx.imei,\n };\n\n const encryptedParams = utils.encodeAES(JSON.stringify(params));\n if (!encryptedParams) throw new ZaloApiError(\"Failed to encrypt params\");\n\n const response = await utils.request(utils.makeURL(serviceURL, { params: encryptedParams }), {\n method: \"GET\",\n });\n\n return utils.resolve(response);\n };\n});\n","import { apiFactory } from \"../utils\";\n\nimport type { User } from \"../models/index\";\n\nexport type FetchAccountInfoResponse = User;\n\nexport const fetchAccountInfoFactory = apiFactory<FetchAccountInfoResponse>()((api, _, utils) => {\n const serviceURL = utils.makeURL(`${api.zpwServiceMap.profile[0]}/api/social/profile/me-v2`);\n\n return async function fetchAccountInfo() {\n const response = await utils.request(serviceURL, {\n method: \"GET\",\n });\n\n return utils.resolve(response);\n };\n});\n","import { ZaloApiError } from \"../Errors/ZaloApiError\";\nimport type { Gender, ZBusinessPackage } from \"../models/index\";\nimport { apiFactory } from \"../utils\";\n\nexport type FindUserResponse = {\n avatar: string;\n cover: string;\n status: string;\n gender: Gender;\n dob: number;\n sdob: string;\n globalId: string;\n bizPkg: ZBusinessPackage;\n uid: string;\n zalo_name: string;\n display_name: string;\n};\n\nexport const findUserFactory = apiFactory<FindUserResponse>()((api, ctx, utils) => {\n const serviceURL = utils.makeURL(`${api.zpwServiceMap.friend[0]}/api/friend/profile/get`);\n\n /**\n * Find user by phone number\n *\n * @param phoneNumber Phone number\n *\n * @throws {ZaloApiError}\n */\n return async function findUser(phoneNumber: string) {\n if (!phoneNumber) throw new ZaloApiError(\"Missing phoneNumber\");\n if (phoneNumber.startsWith(\"0\")) {\n if (ctx.language == \"vi\") phoneNumber = \"84\" + phoneNumber.slice(1);\n }\n\n const params = {\n phone: phoneNumber,\n avatar_size: 240,\n language: ctx.language,\n imei: ctx.imei,\n reqSrc: 40,\n };\n\n const encryptedParams = utils.encodeAES(JSON.stringify(params));\n if (!encryptedParams) throw new ZaloApiError(\"Failed to encrypt message\");\n\n const finalServiceUrl = new URL(serviceURL);\n finalServiceUrl.searchParams.append(\"params\", encryptedParams);\n\n const response = await utils.request(\n utils.makeURL(finalServiceUrl.toString(), {\n params: encryptedParams,\n }),\n );\n\n return utils.resolve(response, (result) => {\n if (result.error && result.error.code != 216)\n throw new ZaloApiError(result.error.message, result.error.code);\n\n return result.data as FindUserResponse;\n });\n };\n});\n","import { ZaloApiError } from \"../Errors/ZaloApiError\";\nimport { ThreadType } from \"../models/index\";\nimport { apiFactory } from \"../utils\";\n\nexport type ForwardMessagePayload = {\n message: string;\n ttl?: number;\n reference?: {\n id: string;\n ts: number;\n logSrcType: number;\n fwLvl: number;\n };\n};\n\nexport type ForwardMessageSuccess = {\n clientId: string;\n msgId: string;\n};\n\nexport type ForwardMessageFail = {\n clientId: string;\n error_code: string;\n};\n\nexport type ForwardMessageResponse = {\n success: ForwardMessageSuccess[];\n fail: ForwardMessageFail[];\n};\n\nexport const forwardMessageFactory = apiFactory<ForwardMessageResponse>()((api, ctx, utils) => {\n const serviceURL = {\n [ThreadType.User]: utils.makeURL(`${api.zpwServiceMap.file[0]}/api/message/mforward`),\n [ThreadType.Group]: utils.makeURL(`${api.zpwServiceMap.file[0]}/api/group/mforward`),\n };\n\n /**\n * Forward message to multiple threads\n *\n * @param payload Forward message payload\n * @param threadId Thread ID(s)\n * @param type Thread type (User/Group)\n *\n * @throws {ZaloApiError}\n */\n return async function forwardMessage(\n payload: ForwardMessagePayload,\n threadIds: string[],\n type: ThreadType = ThreadType.User,\n ) {\n if (!payload.message) throw new ZaloApiError(\"Missing message content\");\n if (!threadIds || threadIds.length === 0) throw new ZaloApiError(\"Missing thread IDs\");\n\n const timestamp = Date.now();\n const clientId = timestamp.toString();\n\n const msgInfo = {\n message: payload.message,\n reference: payload.reference\n ? JSON.stringify({\n type: 3,\n data: JSON.stringify(payload.reference),\n })\n : undefined,\n };\n\n const decorLog = payload.reference\n ? {\n fw: {\n pmsg: {\n st: 1,\n ts: payload.reference.ts,\n id: payload.reference.id,\n },\n rmsg: {\n st: 1,\n ts: payload.reference.ts,\n id: payload.reference.id,\n },\n fwLvl: payload.reference.fwLvl,\n },\n }\n : null;\n\n let params;\n if (type === ThreadType.User) {\n params = {\n toIds: threadIds.map((threadId) => ({\n clientId,\n toUid: threadId,\n ttl: payload.ttl ?? 0,\n })),\n imei: ctx.imei,\n ttl: payload.ttl ?? 0,\n msgType: \"1\",\n totalIds: threadIds.length,\n msgInfo: JSON.stringify(msgInfo),\n decorLog: JSON.stringify(decorLog),\n };\n } else {\n params = {\n grids: threadIds.map((threadId) => ({\n clientId,\n grid: threadId,\n ttl: payload.ttl ?? 0,\n })),\n ttl: payload.ttl ?? 0,\n msgType: \"1\",\n totalIds: threadIds.length,\n msgInfo: JSON.stringify(msgInfo),\n decorLog: JSON.stringify(decorLog),\n };\n }\n\n const encryptedParams = utils.encodeAES(JSON.stringify(params));\n if (!encryptedParams) throw new ZaloApiError(\"Failed to encrypt params\");\n\n const response = await utils.request(serviceURL[type], {\n method: \"POST\",\n body: new URLSearchParams({\n params: encryptedParams,\n }),\n });\n\n return utils.resolve(response);\n };\n});\n","import { ZaloApiError } from \"../Errors/ZaloApiError\";\nimport { apiFactory } from \"../utils\";\n\nexport type GetAliasListResponse = {\n items: {\n userId: string;\n alias: string;\n }[];\n updateTime: string;\n};\n\nexport const getAliasListFactory = apiFactory<GetAliasListResponse>()((api, ctx, utils) => {\n const serviceURL = utils.makeURL(`${api.zpwServiceMap.alias[0]}/api/alias/list`);\n\n /**\n * Get alias list\n *\n * @param count Page size (default: 100)\n * @param page Page number (default: 1)\n *\n * @throws {ZaloApiError}\n */\n return async function getAliasList(count: number = 100, page: number = 1) {\n const params = {\n page,\n count,\n imei: ctx.imei,\n };\n\n const encryptedParams = utils.encodeAES(JSON.stringify(params));\n if (!encryptedParams) throw new ZaloApiError(\"Failed to encrypt params\");\n\n const response = await utils.request(utils.makeURL(serviceURL, { params: encryptedParams }), {\n method: \"GET\",\n });\n\n return utils.resolve(response);\n };\n});\n","import { ZaloApiError } from \"../Errors/ZaloApiError\";\nimport { apiFactory } from \"../utils\";\n\nimport type { User } from \"../models/index\";\n\nexport type GetAllFriendsResponse = User[];\n\nexport const getAllFriendsFactory = apiFactory<GetAllFriendsResponse>()((api, ctx, utils) => {\n const serviceURL = utils.makeURL(`${api.zpwServiceMap.profile[0]}/api/social/friend/getfriends`);\n\n /**\n * Get all friends\n *\n * @param count Page size (default: 20000)\n * @param page Page number (default: 1)\n *\n * @throws {ZaloApiError}\n */\n return async function getAllFriends(count: number = 20000, page: number = 1) {\n const params = {\n incInvalid: 1,\n page,\n count,\n avatar_size: 120,\n actiontime: 0,\n imei: ctx.imei,\n };\n\n const encryptedParams = utils.encodeAES(JSON.stringify(params));\n if (!encryptedParams) throw new ZaloApiError(\"Failed to encrypt message\");\n\n const response = await utils.request(\n utils.makeURL(serviceURL, {\n params: encryptedParams,\n }),\n {\n method: \"GET\",\n },\n );\n\n return utils.resolve(response);\n };\n});\n","import { apiFactory } from \"../utils\";\n\nexport type GetAllGroupsResponse = {\n version: string;\n gridVerMap: {\n [groupId: string]: string;\n };\n};\n\nexport const getAllGroupsFactory = apiFactory<GetAllGroupsResponse>()((api, _, utils) => {\n const serviceURL = utils.makeURL(`${api.zpwServiceMap.group_poll[0]}/api/group/getlg/v4`);\n\n return async function getAllGroups() {\n const response = await utils.request(serviceURL, {\n method: \"GET\",\n });\n\n return utils.resolve(response);\n };\n});\n","import { ZaloApiError } from \"../Errors/ZaloApiError\";\nimport { apiFactory } from \"../utils\";\n\nexport type GetArchivedChatListResponse = {\n items: unknown[]; // @TODO: check type\n version: number;\n};\n\nexport const getArchivedChatListFactory = apiFactory<GetArchivedChatListResponse>()((api, ctx, utils) => {\n const serviceURL = utils.makeURL(`${api.zpwServiceMap.label[0]}/api/archivedchat/list`);\n\n /**\n * Get arcnived chat list\n *\n * @throws {ZaloApiError}\n */\n return async function getArchivedChatList() {\n const params = {\n version: 1,\n imei: ctx.imei,\n };\n\n const encryptedParams = utils.encodeAES(JSON.stringify(params));\n if (!encryptedParams) throw new ZaloApiError(\"Failed to encrypt params\");\n\n const response = await utils.request(utils.makeURL(serviceURL, { params: encryptedParams }), {\n method: \"GET\",\n });\n\n return utils.resolve(response);\n };\n});\n","import { ZaloApiError } from \"../Errors/ZaloApiError\";\nimport { apiFactory } from \"../utils\";\n\nexport type GetAutoDeleteChatResponse = {\n convers: {\n destId: string;\n isGroup: boolean;\n ttl: number;\n createdAt: number;\n }[];\n};\n\nexport const getAutoDeleteChatFactory = apiFactory<GetAutoDeleteChatResponse>()((api, _ctx, utils) => {\n const serviceURL = utils.makeURL(`${api.zpwServiceMap.conversation[0]}/api/conv/autodelete/getConvers`);\n\n /**\n * Get auto delete chat\n *\n * @throws {ZaloApiError}\n *\n */\n return async function getAutoDeleteChat() {\n const params = {};\n\n const encryptedParams = utils.encodeAES(JSON.stringify(params));\n if (!encryptedParams) throw new ZaloApiError(\"Failed to encrypt params\");\n\n const response = await utils.request(utils.makeURL(serviceURL, { params: encryptedParams }), {\n method: \"GET\",\n });\n\n return utils.resolve(response);\n };\n});\n","import { ZaloApiError } from \"../Errors/ZaloApiError\";\nimport { apiFactory } from \"../utils\";\n\nimport type { AutoReplyItem } from \"../models/index\";\n\nexport type GetAutoReplyListResponse = {\n item: AutoReplyItem[];\n version: number;\n};\nexport const getAutoReplyListFactory = apiFactory<GetAutoReplyListResponse>()((api, ctx, utils) => {\n const serviceURL = utils.makeURL(`${api.zpwServiceMap.auto_reply[0]}/api/autoreply/list`);\n\n /**\n * Get auto reply list\n *\n * @note this API used for zBusiness\n * @throws {ZaloApiError}\n */\n return async function getAutoReplyList() {\n const params = {\n version: 0,\n cliLang: ctx.language,\n };\n\n const encryptedParams = utils.encodeAES(JSON.stringify(params));\n if (!encryptedParams) throw new ZaloApiError(\"Failed to encrypt params\");\n\n const response = await utils.request(utils.makeURL(serviceURL, { params: encryptedParams }), {\n method: \"GET\",\n });\n\n return utils.resolve(response);\n };\n});\n","import { ZaloApiError } from \"../Errors/ZaloApiError\";\nimport { apiFactory } from \"../utils\";\n\nexport type GetAvatarListResponse = {\n albumId: string;\n nextPhotoId: string;\n hasMore: number;\n photos: {\n photoId: string;\n thumbnail: string;\n url: string;\n bkUrl: string;\n }[];\n};\n\nexport const getAvatarListFactory = apiFactory<GetAvatarListResponse>()((api, ctx, utils) => {\n const serviceURL = utils.makeURL(`${api.zpwServiceMap.profile[0]}/api/social/avatar-list`);\n\n /**\n * Get avatar list\n *\n * @param count The number of avatars to fetch (default: 50)\n * @param page The page number to fetch (default: 1)\n *\n * @throws {ZaloApiError}\n */\n return async function getAvatarList(count: number = 50, page: number = 1) {\n const params = {\n page,\n albumId: \"0\",\n count,\n imei: ctx.imei,\n };\n\n const encryptedParams = utils.encodeAES(JSON.stringify(params));\n if (!encryptedParams) throw new ZaloApiError(\"Failed to encrypt params\");\n\n const response = await utils.request(utils.makeURL(serviceURL, { params: encryptedParams }), {\n method: \"GET\",\n });\n\n return utils.resolve(response);\n };\n});\n","import { ZaloApiError } from \"../Errors/ZaloApiError\";\nimport type { BusinessCategory } from \"../models/index\";\nimport { apiFactory } from \"../utils\";\n\nexport type GetBizAccountResponse = {\n biz?: {\n desc: string | null;\n cate: BusinessCategory;\n addr: string;\n website: string;\n email: string;\n };\n setting_start_page?: {\n enable_biz_label: number;\n enable_cate: number;\n enable_add: number;\n cta_profile: number;\n /**\n * Relative path used to build the catalog URL.\n *\n * Example: https://catalog.zalo.me/${cta_catalog}\n */\n cta_catalog: string | null;\n } | null;\n pkgId: number;\n};\n\nexport const getBizAccountFactory = apiFactory<GetBizAccountResponse>()((api, _ctx, utils) => {\n const serviceURL = utils.makeURL(`${api.zpwServiceMap.profile[0]}/api/social/friend/get-bizacc`);\n\n /**\n * Get biz account\n *\n * @param friendId The friend ID to get biz account\n *\n * @throws {ZaloApiError}\n */\n return async function getBizAccount(friendId: string) {\n const params = {\n fid: friendId,\n };\n\n const encryptedParams = utils.encodeAES(JSON.stringify(params));\n if (!encryptedParams) throw new ZaloApiError(\"Failed to encrypt params\");\n\n const response = await utils.request(serviceURL, {\n method: \"POST\",\n body: new URLSearchParams({\n params: encryptedParams,\n }),\n });\n\n return utils.resolve(response);\n };\n});\n","import { ZaloApiError } from \"../Errors/ZaloApiError\";\nimport { apiFactory } from \"../utils\";\n\nimport type { CatalogItem } from \"../models/index\";\n\nexport type GetCatalogListPayload = {\n /**\n * Number of items to retrieve (default: 20)\n */\n limit?: number;\n lastProductId?: number;\n /**\n * Page number (default: 0)\n */\n page?: number;\n};\n\nexport type GetCatalogListResponse = {\n items: CatalogItem[];\n version: number;\n has_more: number;\n};\n\nexport const getCatalogListFactory = apiFactory<GetCatalogListResponse>()((api, _, utils) => {\n const serviceURL = utils.makeURL(`${api.zpwServiceMap.catalog[0]}/api/prodcatalog/catalog/list`);\n\n /**\n * Get catalog list?\n *\n * @param payload payload\n *\n * @note this API is used for zBusiness\n * @throws {ZaloApiError}\n */\n return async function getCatalogList(payload?: GetCatalogListPayload) {\n const params = {\n version_list_catalog: 0,\n limit: payload?.limit ?? 20,\n last_product_id: payload?.lastProductId ?? -1,\n page: payload?.page ?? 0,\n };\n\n const encryptedParams = utils.encodeAES(JSON.stringify(params));\n if (!encryptedParams) throw new ZaloApiError(\"Failed to encrypt params\");\n\n const response = await utils.request(serviceURL, {\n method: \"POST\",\n body: new URLSearchParams({\n params: encryptedParams,\n }),\n });\n\n return utils.resolve(response);\n };\n});\n","import { apiFactory } from \"../utils\";\n\nexport const getContextFactory = apiFactory()((_, ctx) => {\n return () => ctx;\n});\n","import { apiFactory } from \"../utils\";\n\nexport const getCookieFactory = apiFactory()((_, ctx) => {\n /**\n * Get the current cookie string\n */\n return function getCookie() {\n return ctx.cookie;\n };\n});\n","import { ZaloApiError } from \"../Errors/ZaloApiError\";\nimport { apiFactory } from \"../utils\";\n\nexport type GetFriendBoardListResponse = {\n data: string[];\n version: number;\n};\n\nexport const getFriendBoardListFactory = apiFactory<GetFriendBoardListResponse>()((api, ctx, utils) => {\n const serviceURL = utils.makeURL(`${api.zpwServiceMap.friend_board[0]}/api/friendboard/list`);\n\n /**\n * Get friend board list\n *\n * @param conversationId conversation id\n *\n * @throws {ZaloApiError}\n */\n return async function getFriendBoardList(conversationId: string) {\n const params = {\n conversationId: conversationId,\n version: 0,\n imei: ctx.imei,\n };\n\n const encryptedParams = utils.encodeAES(JSON.stringify(params));\n if (!encryptedParams) throw new ZaloApiError(\"Failed to encrypt params\");\n\n const response = await utils.request(utils.makeURL(serviceURL, { params: encryptedParams }), {\n method: \"GET\",\n });\n\n return utils.resolve(response);\n };\n});\n","import { ZaloApiError } from \"../Errors/ZaloApiError\";\nimport isArray from \"lodash/isArray\";\n\nimport { apiFactory } from \"../utils\";\n\nexport type GetFriendOnlinesStatus = {\n userId: string;\n status: string;\n};\n\n\nexport type GetFriendOnlinesResponse = {\n predefine: string[];\n ownerStatus: string;\n onlines: GetFriendOnlinesStatus[];\n};\n\nexport const getFriendOnlinesFactory = apiFactory<GetFriendOnlinesResponse>()((api, ctx, utils) => {\n const serviceURL = utils.makeURL(`${api.zpwServiceMap.profile[0]}/api/social/friend/onlines`);\n\n /**\n * Get friend onlines?\n *\n * @throws {ZaloApiError}\n */\n return async function getFriendOnlines() {\n const params = {\n imei: ctx.imei,\n };\n\n const encryptedParams = utils.encodeAES(JSON.stringify(params));\n if (!encryptedParams) throw new ZaloApiError(\"Failed to encrypt params\");\n\n const response = await utils.request(utils.makeURL(serviceURL, { params: encryptedParams }), {\n method: \"GET\",\n });\n\n return utils.resolve(response, (result) => {\n const data = result.data as GetFriendOnlinesResponse;\n\n if (isArray(data.onlines)) {\n for (const online of data.onlines) {\n if (typeof online.status === \"string\") {\n const parsed = JSON.parse(online.status);\n if (parsed && typeof (parsed as { status?: unknown }).status === \"string\") {\n online.status = (parsed as { status: string }).status;\n }\n }\n }\n }\n\n return data as GetFriendOnlinesResponse;\n });\n };\n});\n","import { ZaloApiError } from \"../Errors/ZaloApiError\";\nimport type { Gender, ZBusinessPackage } from \"../models/index\";\nimport { apiFactory } from \"../utils\";\n\nexport type FriendRecommendationsCollapseMsgListConfig = {\n collapseId: number;\n collapseXItem: number;\n collapseYItem: number;\n};\n\nexport type FriendRecommendationsDataInfo = {\n userId: string;\n zaloName: string;\n displayName: string;\n avatar: string;\n phoneNumber: string;\n status: string;\n gender: Gender;\n dob: number;\n type: number;\n recommType: number;\n recommSrc: number;\n recommTime: number;\n recommInfo: {\n suggestWay: number;\n source: number;\n message: string;\n customText: string | null;\n };\n bizPkg: ZBusinessPackage;\n isSeenFriendReq: boolean;\n};\n\nexport type FriendRecommendationsRecommItem = {\n recommItemType: number;\n dataInfo: FriendRecommendationsDataInfo;\n};\n\nexport type GetFriendRecommendationsResponse = {\n expiredDuration: number;\n collapseMsgListConfig: FriendRecommendationsCollapseMsgListConfig;\n recommItems: FriendRecommendationsRecommItem[];\n};\n\nexport const getFriendRecommendationsFactory = apiFactory<GetFriendRecommendationsResponse>()((api, ctx, utils) => {\n const serviceURL = utils.makeURL(`${api.zpwServiceMap.friend[0]}/api/friend/recommendsv2/list`);\n\n /**\n * Get friend recommendations\n *\n * @throws {ZaloApiError}\n */\n return async function getFriendRecommendations() {\n const params = {\n imei: ctx.imei,\n };\n\n const encryptedParams = utils.encodeAES(JSON.stringify(params));\n if (!encryptedParams) throw new ZaloApiError(\"Failed to encrypt params\");\n\n const response = await utils.request(utils.makeURL(serviceURL, { params: encryptedParams }), {\n method: \"GET\",\n });\n\n return utils.resolve(response);\n };\n});\n","import { ZaloApiError } from \"../Errors/ZaloApiError\";\nimport { apiFactory } from \"../utils\";\n\nexport type GetFriendRequestStatusResponse = {\n addFriendPrivacy: number;\n isSeenFriendReq: boolean;\n is_friend: number;\n is_requested: number;\n is_requesting: number;\n};\n\nexport const getFriendRequestStatusFactory = apiFactory<GetFriendRequestStatusResponse>()((api, ctx, utils) => {\n const serviceURL = utils.makeURL(`${api.zpwServiceMap.friend[0]}/api/friend/reqstatus`);\n\n /**\n * Get friend request status\n *\n * @param friendId friend id\n *\n * @throws {ZaloApiError}\n */\n return async function getFriendRequestStatus(friendId: string) {\n const params = {\n fid: friendId,\n imei: ctx.imei,\n };\n\n const encryptedParams = utils.encodeAES(JSON.stringify(params));\n if (!encryptedParams) throw new ZaloApiError(\"Failed to encrypt params\");\n\n const response = await utils.request(utils.makeURL(serviceURL, { params: encryptedParams }), {\n method: \"GET\",\n });\n\n return utils.resolve(response);\n };\n});\n","import { ZaloApiError } from \"../Errors/ZaloApiError\";\nimport { apiFactory } from \"../utils\";\n\nexport type GetGroupBlockedMemberPayload = {\n /**\n * Page number (default: 1)\n */\n page?: number;\n /**\n * Number of items to retrieve (default: 50)\n */\n count?: number;\n};\n\nexport type GetGroupBlockedMemberResponse = {\n blocked_members: {\n id: string;\n dName: string;\n zaloName: string;\n avatar: string;\n avatar_25: string;\n accountStatus: number;\n type: number;\n }[];\n has_more: number;\n};\n\nexport const getGroupBlockedMemberFactory = apiFactory<GetGroupBlockedMemberResponse>()((api, ctx, utils) => {\n const serviceURL = utils.makeURL(`${api.zpwServiceMap.group[0]}/api/group/blockedmems/list`);\n\n /**\n * Get group blocked member\n *\n * @param payload payload\n * @param groupId group id\n *\n * @throws {ZaloApiError}\n */\n return async function getGroupBlockedMember(payload: GetGroupBlockedMemberPayload, groupId: string) {\n const params = {\n grid: groupId,\n page: payload.page ?? 1,\n count: payload.count ?? 50,\n imei: ctx.imei,\n };\n\n const encryptedParams = utils.encodeAES(JSON.stringify(params));\n if (!encryptedParams) throw new ZaloApiError(\"Failed to encrypt params\");\n\n const response = await utils.request(utils.makeURL(serviceURL, { params: encryptedParams }), {\n method: \"GET\",\n });\n\n return utils.resolve(response);\n };\n});\n","import { ZaloApiError } from \"../Errors/ZaloApiError\";\nimport castArray from \"lodash/castArray\";\n\nimport type { GroupInfo } from \"../models/index\";\nimport { apiFactory } from \"../utils\";\n\nexport type GroupInfoResponse = {\n removedsGroup: string[];\n unchangedsGroup: string[];\n gridInfoMap: {\n [groupId: string]: GroupInfo & {\n memVerList: string[];\n pendingApprove: GroupInfoPendingApprove;\n };\n };\n};\n\nexport type GroupInfoPendingApprove = {\n time: number;\n uids: string[] | null;\n};\n\nexport const getGroupInfoFactory = apiFactory<GroupInfoResponse>()((api, _, utils) => {\n const serviceURL = utils.makeURL(`${api.zpwServiceMap.group[0]}/api/group/getmg-v2`);\n\n /**\n * Get group information\n *\n * @param groupId Group ID or list of group IDs\n *\n * @throws {ZaloApiError}\n */\n return async function getGroupInfo(groupId: string | string[]) {\n const groupIds = castArray(groupId);\n\n const params = {\n gridVerMap: JSON.stringify(\n groupIds.reduce<Record<string, number>>((acc, id) => {\n acc[id] = 0;\n return acc;\n }, {}),\n ),\n };\n\n const encryptedParams = utils.encodeAES(JSON.stringify(params));\n if (!encryptedParams) throw new ZaloApiError(\"Failed to encrypt message\");\n\n const response = await utils.request(serviceURL, {\n method: \"POST\",\n body: new URLSearchParams({\n params: encryptedParams,\n }),\n });\n\n return utils.resolve(response);\n };\n});\n","import { ZaloApiError } from \"../Errors/ZaloApiError\";\nimport { apiFactory } from \"../utils\";\n\nimport type { GroupInfo, GroupTopic } from \"../models/index\";\n\nexport type GetGroupInviteBoxInfoPayload = {\n groupId: string;\n mpage?: number;\n mcount?: number;\n};\n\nexport type GetGroupInviteBoxInfoResponse = {\n groupInfo: GroupInfo & {\n topic?: Omit<GroupTopic, \"action\">;\n };\n inviterInfo: {\n id: string;\n dName: string;\n zaloName: string;\n avatar: string;\n avatar_25: string;\n accountStatus: number;\n type: number;\n };\n grCreatorInfo: {\n id: string;\n dName: string;\n zaloName: string;\n avatar: string;\n avatar_25: string;\n accountStatus: number;\n type: number;\n };\n expiredTs: string;\n type: number;\n};\n\nexport const getGroupInviteBoxInfoFactory = apiFactory<GetGroupInviteBoxInfoResponse>()((api, _, utils) => {\n const serviceURL = utils.makeURL(`${api.zpwServiceMap.group[0]}/api/group/inv-box/inv-info`);\n\n /**\n * Get group invite box info\n *\n * @param payload - The payload of the request\n *\n * @throws {ZaloApiError}\n */\n return async function getGroupInviteBoxInfo(payload: GetGroupInviteBoxInfoPayload) {\n const params = {\n grId: payload.groupId,\n mcount: payload.mcount ?? 10,\n mpage: payload.mpage ?? 1,\n };\n\n const encryptedParams = utils.encodeAES(JSON.stringify(params));\n if (!encryptedParams) throw new ZaloApiError(\"Failed to encrypt params\");\n\n const response = await utils.request(utils.makeURL(serviceURL, { params: encryptedParams }), {\n method: \"GET\",\n });\n\n return utils.resolve(response, (result) => {\n const data = result.data as GetGroupInviteBoxInfoResponse;\n const topic = data.groupInfo.topic as GetGroupInviteBoxInfoResponse[\"groupInfo\"][\"topic\"] & {\n params: unknown;\n };\n if (typeof topic.params == \"string\") {\n const params = JSON.parse(topic.params);\n if (typeof params.extra == \"string\") {\n params.extra = JSON.parse(params.extra);\n }\n\n topic.params = params;\n }\n\n return data as GetGroupInviteBoxInfoResponse;\n });\n };\n});\n","import { ZaloApiError } from \"../Errors/ZaloApiError\";\nimport type { GroupInfo } from \"../models/index\";\nimport { apiFactory } from \"../utils\";\n\nexport type GetGroupInviteBoxListPayload = {\n mpage?: number;\n page?: number;\n invPerPage?: number;\n mcount?: number;\n};\n\nexport type GetGroupInviteBoxListResponse = {\n invitations: {\n groupInfo: GroupInfo;\n inviterInfo: {\n id: string;\n dName: string;\n zaloName: string;\n avatar: string;\n avatar_25: string;\n accountStatus: number;\n type: number;\n };\n grCreatorInfo: {\n id: string;\n dName: string;\n zaloName: string;\n avatar: string;\n avatar_25: string;\n accountStatus: number;\n type: number;\n };\n /**\n * Expired timestamp max 7 days\n */\n expiredTs: string;\n type: number;\n }[];\n total: number;\n hasMore: boolean;\n};\n\nexport const getGroupInviteBoxListFactory = apiFactory<GetGroupInviteBoxListResponse>()((api, _, utils) => {\n const serviceURL = utils.makeURL(`${api.zpwServiceMap.group[0]}/api/group/inv-box/list`);\n\n /**\n * Get group invite box list\n *\n * @param payload - The payload of the request\n *\n * @throws {ZaloApiError}\n */\n return async function getGroupInviteBoxList(payload?: GetGroupInviteBoxListPayload) {\n const params = {\n mpage: payload?.mpage ?? 1,\n page: payload?.page ?? 0,\n invPerPage: payload?.invPerPage ?? 12,\n mcount: payload?.mcount ?? 10,\n lastGroupId: null, // @TODO: check type\n avatar_size: 120,\n member_avatar_size: 120,\n };\n\n const encryptedParams = utils.encodeAES(JSON.stringify(params));\n if (!encryptedParams) throw new ZaloApiError(\"Failed to encrypt params\");\n\n const response = await utils.request(utils.makeURL(serviceURL, { params: encryptedParams }), {\n method: \"GET\",\n });\n\n return utils.resolve(response);\n };\n});\n","import { ZaloApiError } from \"../Errors/ZaloApiError\";\nimport { apiFactory } from \"../utils\";\n\nexport type GetGroupLinkDetailResponse = {\n link?: string;\n expiration_date?: number;\n /**\n * 1: enabled, 0: disabled\n */\n enabled: number;\n};\n\nexport const getGroupLinkDetailFactory = apiFactory<GetGroupLinkDetailResponse>()((api, ctx, utils) => {\n const serviceURL = utils.makeURL(`${api.zpwServiceMap.group[0]}/api/group/link/detail`);\n\n /**\n * Get group link detail\n *\n * @param groupId The group id\n *\n * @throws {ZaloApiError}\n */\n return async function getGroupLinkDetail(groupId: string) {\n const params = {\n grid: groupId,\n imei: ctx.imei,\n };\n\n const encryptedParams = utils.encodeAES(JSON.stringify(params));\n if (!encryptedParams) throw new ZaloApiError(\"Failed to encrypt params\");\n\n const response = await utils.request(utils.makeURL(serviceURL, { params: encryptedParams }), {\n method: \"GET\",\n });\n\n return utils.resolve(response);\n };\n});\n","import { ZaloApiError } from \"../Errors/ZaloApiError\";\nimport type { GroupSetting } from \"../models/index\";\nimport { apiFactory } from \"../utils\";\n\nexport type GetGroupLinkInfoPayload = {\n link: string;\n /**\n * Default: 1\n */\n memberPage?: number;\n};\n\nexport type GetGroupLinkInfoResponse = {\n groupId: string;\n name: string;\n desc: string;\n type: number;\n creatorId: string;\n avt: string;\n fullAvt: string;\n adminIds: string[];\n currentMems: {\n id: string;\n dName: string;\n zaloName: string;\n avatar: string;\n avatar_25: string;\n accountStatus: number;\n type: number;\n }[];\n admins: unknown[];\n hasMoreMember: number;\n subType: number;\n totalMember: number;\n setting: GroupSetting;\n globalId: string;\n};\n\nexport const getGroupLinkInfoFactory = apiFactory<GetGroupLinkInfoResponse>()((api, _ctx, utils) => {\n const serviceURL = utils.makeURL(`${api.zpwServiceMap.group[0]}/api/group/link/ginfo`);\n\n /**\n * Get group link info\n *\n * @param payload - The payload of the request\n *\n * @throws {ZaloApiError}\n */\n return async function getGroupLinkInfo(payload: GetGroupLinkInfoPayload) {\n const params = {\n link: payload.link,\n avatar_size: 120,\n member_avatar_size: 120,\n mpage: payload.memberPage ?? 1,\n };\n\n const encryptedParams = utils.encodeAES(JSON.stringify(params));\n if (!encryptedParams) throw new ZaloApiError(\"Failed to encrypt params\");\n\n const response = await utils.request(utils.makeURL(serviceURL, { params: encryptedParams }), {\n method: \"GET\",\n });\n\n return utils.resolve(response);\n };\n});\n","import { ZaloApiError } from \"../Errors/ZaloApiError\";\nimport castArray from \"lodash/castArray\";\n\nimport { apiFactory } from \"../utils\";\n\nexport type GroupMemberProfile = {\n displayName: string;\n zaloName: string;\n avatar: string;\n accountStatus: number;\n type: number;\n lastUpdateTime: number;\n globalId: string;\n id: string;\n};\n\nexport type GetGroupMembersInfoResponse = {\n profiles: {\n [memberId: string]: GroupMemberProfile;\n };\n unchangeds_profile: unknown[];\n};\n\nexport const getGroupMembersInfoFactory = apiFactory<GetGroupMembersInfoResponse>()((api, _, utils) => {\n const serviceURL = utils.makeURL(`${api.zpwServiceMap.profile[0]}/api/social/group/members`);\n\n /**\n * Get group information\n *\n * @param memberId member id or array of member ids\n *\n * @throws {ZaloApiError}\n */\n return async function getGroupMembersInfo(memberId: string | string[]) {\n const memberIds = castArray(memberId);\n\n const params = {\n friend_pversion_map: memberIds.map((id) => (id.endsWith(\"_0\") ? id : `${id}_0`)),\n };\n\n const encryptedParams = utils.encodeAES(JSON.stringify(params));\n if (!encryptedParams) throw new ZaloApiError(\"Failed to encrypt message\");\n\n const response = await utils.request(utils.makeURL(serviceURL, { params: encryptedParams }));\n\n return utils.resolve(response);\n };\n});\n","import { ZaloApiError } from \"../Errors/ZaloApiError\";\nimport { apiFactory } from \"../utils\";\n\nexport type GetHiddenConversationsResponse = {\n pin: string;\n threads: {\n /**\n * 1: true, 0: false\n */\n is_group: number;\n thread_id: string;\n }[];\n};\n\nexport const getHiddenConversationsFactory = apiFactory<GetHiddenConversationsResponse>()((api, ctx, utils) => {\n const serviceURL = utils.makeURL(`${api.zpwServiceMap.conversation[0]}/api/hiddenconvers/get-all`);\n\n /**\n * Get hidden conversations\n *\n * @throws {ZaloApiError}\n *\n */\n return async function getHiddenConversations() {\n const params = {\n imei: ctx.imei,\n };\n\n const encryptedParams = utils.encodeAES(JSON.stringify(params));\n if (!encryptedParams) throw new ZaloApiError(\"Failed to encrypt params\");\n\n const response = await utils.request(utils.makeURL(serviceURL, { params: encryptedParams }), {\n method: \"GET\",\n });\n\n return utils.resolve(response);\n };\n});\n","import { ZaloApiError } from \"../Errors/ZaloApiError\";\nimport { apiFactory } from \"../utils\";\n\nimport type { LabelData } from \"../models/index\";\n\nexport type GetLabelsResponse = {\n labelData: LabelData[];\n version: number;\n lastUpdateTime: number;\n};\n\ntype RawResponseType = Omit<GetLabelsResponse, \"labelData\"> & {\n labelData: string;\n};\n\nexport const getLabelsFactory = apiFactory<GetLabelsResponse>()((api, ctx, utils) => {\n const serviceURL = utils.makeURL(`${api.zpwServiceMap.label[0]}/api/convlabel/get`);\n\n /**\n * Get all labels\n *\n * @throws {ZaloApiError}\n */\n return async function getLabels() {\n const params = {\n imei: ctx.imei,\n };\n\n const encryptedParams = utils.encodeAES(JSON.stringify(params));\n if (!encryptedParams) throw new ZaloApiError(\"Failed to encrypt message\");\n\n const response = await utils.request(utils.makeURL(serviceURL, { params: encryptedParams }));\n\n return utils.resolve(response, (result) => {\n const data = result.data as RawResponseType;\n const formattedData: GetLabelsResponse = {\n labelData: JSON.parse(data.labelData),\n version: data.version,\n lastUpdateTime: data.lastUpdateTime,\n };\n return formattedData;\n });\n };\n});\n","import { ZaloApiError } from \"../Errors/ZaloApiError\";\nimport type { NoteDetail, PinnedMessageDetail, PollDetail} from \"../models/index\";\nimport { BoardType } from \"../models/index\";\nimport { apiFactory } from \"../utils\";\n\nexport type ListBoardOptions = {\n /**\n * Page number (default: 1)\n */\n page?: number;\n /**\n * Number of items to retrieve (default: 20)\n */\n count?: number;\n};\n\nexport type BoardItem = {\n boardType: BoardType;\n data: PollDetail | NoteDetail | PinnedMessageDetail;\n};\n\nexport type GetListBoardResponse = {\n items: BoardItem[];\n count: number;\n};\n\ntype RawListBoard = {\n items: {\n boardType: BoardType;\n data: Record<string, unknown>;\n }[];\n count: number;\n};\n\nexport const getListBoardFactory = apiFactory<GetListBoardResponse>()((api, ctx, utils) => {\n const serviceURL = utils.makeURL(`${api.zpwServiceMap.group_board[0]}/api/board/list`);\n\n /**\n * Get list board items in a group\n *\n * @param options - The options for the request\n * @param groupId - The ID of the group\n *\n * @throws {ZaloApiError}\n *\n */\n return async function getListBoard(options: ListBoardOptions, groupId: string) {\n const requestParams = {\n group_id: groupId,\n board_type: 0,\n page: options.page ?? 1,\n count: options.count ?? 20,\n last_id: 0,\n last_type: 0,\n imei: ctx.imei,\n };\n\n const encryptedParams = utils.encodeAES(JSON.stringify(requestParams));\n if (!encryptedParams) throw new ZaloApiError(\"Failed to encrypt params\");\n\n const response = await utils.request(utils.makeURL(serviceURL, { params: encryptedParams }), {\n method: \"GET\",\n });\n\n return utils.resolve(response, (result) => {\n const data = result.data as RawListBoard;\n data.items.forEach((item) => {\n if (item.boardType != BoardType.Poll) {\n const detailData = item.data;\n if (typeof detailData.params === \"string\") {\n detailData.params = JSON.parse(detailData.params);\n }\n }\n });\n\n return data as GetListBoardResponse;\n });\n };\n});\n","import { ZaloApiError } from \"../Errors/ZaloApiError\";\nimport type { ReminderGroup, ReminderUser} from \"../models/index\";\nimport { ThreadType } from \"../models/index\";\nimport { apiFactory } from \"../utils\";\n\nexport type ListReminderOptions = {\n /**\n * Page number (default: 1)\n */\n page?: number;\n /**\n * Number of items to retrieve (default: 20)\n */\n count?: number;\n};\n\nexport type ReminderListUser = ReminderUser;\nexport type ReminderListGroup = ReminderGroup & {\n groupId: string;\n eventType: number;\n responseMem: {\n rejectMember: number;\n myResp: number;\n acceptMember: number;\n };\n repeatInfo: {\n list_ts: unknown[];\n };\n repeatData: unknown[];\n};\n\nexport type GetListReminderResponse = (ReminderListUser & ReminderListGroup)[];\n\nexport const getListReminderFactory = apiFactory<GetListReminderResponse>()((api, ctx, utils) => {\n const serviceURL = {\n [ThreadType.User]: utils.makeURL(`${api.zpwServiceMap.group_board[0]}/api/board/oneone/list`),\n [ThreadType.Group]: utils.makeURL(`${api.zpwServiceMap.group_board[0]}/api/board/listReminder`),\n };\n\n /**\n * Get list reminder\n *\n * @param options - The options for the request\n * @param threadId - The ID of the thread\n * @param type - The type of the thread (User or Group)\n *\n * @throws {ZaloApiError}\n */\n return async function getListReminder(\n options: ListReminderOptions,\n threadId: string,\n type: ThreadType = ThreadType.User,\n ) {\n const requestParams = {\n objectData: JSON.stringify(\n type === ThreadType.User\n ? {\n uid: threadId,\n board_type: 1,\n page: options.page ?? 1,\n count: options.count ?? 20,\n last_id: 0,\n last_type: 0,\n }\n : {\n group_id: threadId,\n board_type: 1,\n page: options.page ?? 1,\n count: options.count ?? 20,\n last_id: 0,\n last_type: 0,\n },\n ),\n ...(type === ThreadType.Group && { imei: ctx.imei }),\n };\n\n const encryptedParams = utils.encodeAES(JSON.stringify(requestParams));\n if (!encryptedParams) throw new ZaloApiError(\"Failed to encrypt params\");\n\n const response = await utils.request(utils.makeURL(serviceURL[type], { params: encryptedParams }), {\n method: \"GET\",\n });\n\n return utils.resolve(response, (result) => {\n return JSON.parse(result.data as string) as GetListReminderResponse;\n });\n };\n});\n","import { ZaloApiError } from \"../Errors/ZaloApiError\";\nimport { apiFactory } from \"../utils\";\n\nexport type MuteEntriesInfo = {\n id: string;\n duration: number;\n startTime: number;\n systemTime: number;\n currentTime: number;\n muteMode: number;\n};\n\nexport type GetMuteResponse = {\n chatEntries: MuteEntriesInfo[];\n groupChatEntries: MuteEntriesInfo[];\n};\n\nexport const getMuteFactory = apiFactory<GetMuteResponse>()((api, ctx, utils) => {\n const serviceURL = utils.makeURL(`${api.zpwServiceMap.profile[0]}/api/social/profile/getmute`);\n\n /**\n * Get mute\n *\n * @throws {ZaloApiError}\n */\n return async function getMute() {\n const params = {\n imei: ctx.imei,\n };\n\n const encryptedParams = utils.encodeAES(JSON.stringify(params));\n if (!encryptedParams) throw new ZaloApiError(\"Failed to encrypt params\");\n\n const response = await utils.request(utils.makeURL(serviceURL, { params: encryptedParams }), {\n method: \"GET\",\n });\n\n return utils.resolve(response);\n };\n});\n","import { apiFactory } from \"../utils\";\n\nexport const getOwnIdFactory = apiFactory()((_, ctx) => {\n return () => ctx.uid;\n});\n","import { ZaloApiError } from \"../Errors/ZaloApiError\";\nimport { apiFactory } from \"../utils\";\n\nexport type GetPendingGroupMembersUserInfo = {\n uid: string;\n dpn: string;\n avatar: string;\n user_submit: null;\n};\n\nexport type GetPendingGroupMembersResponse = {\n time: number;\n users: GetPendingGroupMembersUserInfo[];\n};\n\nexport const getPendingGroupMembersFactory = apiFactory<GetPendingGroupMembersResponse>()((api, ctx, utils) => {\n const serviceURL = utils.makeURL(`${api.zpwServiceMap.group[0]}/api/group/pending-mems/list`);\n\n /**\n * Get pending group members\n *\n * @param groupId - The id of the group to get the pending members\n *\n * @note Only the group leader and deputy group leader can view\n *\n * @throws {ZaloApiError}\n */\n return async function getPendingGroupMembers(groupId: string) {\n const params = {\n grid: groupId,\n imei: ctx.imei,\n };\n\n const encryptedParams = utils.encodeAES(JSON.stringify(params));\n if (!encryptedParams) throw new ZaloApiError(\"Failed to encrypt params\");\n\n const response = await utils.request(utils.makeURL(serviceURL, { params: encryptedParams }), {\n method: \"GET\",\n });\n\n return utils.resolve(response);\n };\n});\n","import { ZaloApiError } from \"../Errors/ZaloApiError\";\nimport { apiFactory } from \"../utils\";\n\nexport type GetPinConversationsResponse = {\n conversations: string[];\n version: number;\n};\n\nexport const getPinConversationsFactory = apiFactory<GetPinConversationsResponse>()((api, ctx, utils) => {\n const serviceURL = utils.makeURL(`${api.zpwServiceMap.conversation[0]}/api/pinconvers/list`);\n\n /**\n * Get pin conversations\n *\n * @throws {ZaloApiError}\n */\n return async function getPinConversations() {\n const params = {\n imei: ctx.imei,\n };\n\n const encryptedParams = utils.encodeAES(JSON.stringify(params));\n if (!encryptedParams) throw new ZaloApiError(\"Failed to encrypt params\");\n\n const response = await utils.request(utils.makeURL(serviceURL, { params: encryptedParams }), {\n method: \"GET\",\n });\n\n return utils.resolve(response);\n };\n});\n","import { ZaloApiError } from \"../Errors/ZaloApiError\";\nimport type { PollDetail } from \"../models/index\";\nimport { apiFactory } from \"../utils\";\n\nexport type PollDetailResponse = PollDetail;\n\nexport const getPollDetailFactory = apiFactory<PollDetailResponse>()((api, ctx, utils) => {\n const serviceURL = utils.makeURL(`${api.zpwServiceMap.group[0]}/api/poll/detail`);\n\n /**\n * Get poll detail\n *\n * @param pollId Poll ID\n *\n * @throws {ZaloApiError}\n */\n return async function getPollDetail(pollId: number) {\n if (!pollId) throw new ZaloApiError(\"Missing poll id\");\n\n const params = {\n poll_id: pollId,\n imei: ctx.imei,\n };\n\n const encryptedParams = utils.encodeAES(JSON.stringify(params));\n if (!encryptedParams) throw new ZaloApiError(\"Failed to encrypt message\");\n\n const response = await utils.request(serviceURL, {\n method: \"POST\",\n body: new URLSearchParams({\n params: encryptedParams,\n }),\n });\n\n return utils.resolve(response);\n };\n});\n","import { ZaloApiError } from \"../Errors/ZaloApiError\";\nimport { apiFactory } from \"../utils\";\n\nimport type { ProductCatalogItem } from \"../models/index\";\n\nexport type GetProductCatalogListPayload = {\n catalogId: string;\n /**\n * Number of items to retrieve (default: 100)\n */\n limit?: number;\n versionCatalog?: number;\n lastProductId?: string;\n /**\n * Page number (default: 0)\n */\n page?: number;\n};\n\nexport type GetProductCatalogListResponse = {\n items: ProductCatalogItem[];\n version: number;\n has_more: number;\n};\n\nexport const getProductCatalogListFactory = apiFactory<GetProductCatalogListResponse>()((api, _, utils) => {\n const serviceURL = utils.makeURL(`${api.zpwServiceMap.catalog[0]}/api/prodcatalog/product/list`);\n\n /**\n * Get product catalog list?\n *\n * @param payload payload\n *\n * @note this API is used for zBusiness\n * @throws {ZaloApiError}\n */\n return async function getProductCatalogList(payload: GetProductCatalogListPayload) {\n const params = {\n catalog_id: payload.catalogId,\n limit: payload.limit ?? 100,\n version_catalog: payload.versionCatalog ?? 0,\n last_product_id: payload.lastProductId ?? -1,\n page: payload.page ?? 0,\n };\n\n const encryptedParams = utils.encodeAES(JSON.stringify(params));\n if (!encryptedParams) throw new ZaloApiError(\"Failed to encrypt params\");\n\n const response = await utils.request(serviceURL, {\n method: \"POST\",\n body: new URLSearchParams({\n params: encryptedParams,\n }),\n });\n\n return utils.resolve(response);\n };\n});\n","import { ZaloApiError } from \"../Errors/ZaloApiError\";\nimport { apiFactory } from \"../utils\";\n\nexport type GetQRResponse = {\n [userId: string]: string;\n};\n\nexport const getQRFactory = apiFactory<GetQRResponse>()((api, _, utils) => {\n const serviceURL = utils.makeURL(`${api.zpwServiceMap.friend[0]}/api/friend/mget-qr`);\n\n /**\n * Get QR code for users\n *\n * @param userId User ID or list of user IDs\n *\n * @throws {ZaloApiError}\n */\n return async function getQR(userId: string | string[]) {\n if (typeof userId == \"string\") userId = [userId];\n\n const params = {\n fids: userId,\n };\n\n const encryptedParams = utils.encodeAES(JSON.stringify(params));\n if (!encryptedParams) throw new ZaloApiError(\"Failed to encrypt params\");\n\n const response = await utils.request(serviceURL, {\n method: \"POST\",\n body: new URLSearchParams({\n params: encryptedParams,\n }),\n });\n\n return utils.resolve(response);\n };\n});\n","import { ZaloApiError } from \"../Errors/ZaloApiError\";\nimport type { QuickMessage } from \"../models/index\";\nimport { apiFactory } from \"../utils\";\n\nexport type GetQuickMessageListResponse = {\n cursor: number;\n version: number;\n items: QuickMessage[];\n};\n\nexport const getQuickMessageListFactory = apiFactory<GetQuickMessageListResponse>()((api, ctx, utils) => {\n const serviceURL = utils.makeURL(`${api.zpwServiceMap.quick_message[0]}/api/quickmessage/list`);\n\n /**\n * Get quick message list\n *\n * @throws {ZaloApiError}\n */\n return async function getQuickMessageList() {\n const params = {\n version: 0,\n lang: 0,\n imei: ctx.imei,\n };\n\n const encryptedParams = utils.encodeAES(JSON.stringify(params));\n if (!encryptedParams) throw new ZaloApiError(\"Failed to encrypt params\");\n\n const response = await utils.request(utils.makeURL(serviceURL, { params: encryptedParams }), {\n method: \"GET\",\n });\n\n return utils.resolve(response);\n };\n});\n","import { ZaloApiError } from \"../Errors/ZaloApiError\";\nimport castArray from \"lodash/castArray\";\n\nimport { apiFactory } from \"../utils\";\n\nexport type GetRelatedFriendGroupResponse = {\n groupRelateds: {\n [friendId: string]: string[];\n };\n};\n\nexport const getRelatedFriendGroupFactory = apiFactory<GetRelatedFriendGroupResponse>()((api, ctx, utils) => {\n const serviceURL = utils.makeURL(`${api.zpwServiceMap.friend[0]}/api/friend/group/related`);\n\n /**\n * Get related friend group\n *\n * @param friendId friend ids\n *\n * @note this API is used for zBusiness\n * @throws {ZaloApiError}\n */\n return async function getRelatedFriendGroup(friendId: string | string[]) {\n const friendIds = castArray(friendId);\n\n const params = {\n friend_ids: JSON.stringify(friendIds),\n imei: ctx.imei,\n };\n\n const encryptedParams = utils.encodeAES(JSON.stringify(params));\n if (!encryptedParams) throw new ZaloApiError(\"Failed to encrypt params\");\n\n const response = await utils.request(serviceURL, {\n method: \"POST\",\n body: new URLSearchParams({\n params: encryptedParams,\n }),\n });\n\n return utils.resolve(response);\n };\n});\n","import { ZaloApiError } from \"../Errors/ZaloApiError\";\nimport type { ReminderGroup } from \"../models/index\";\nimport { apiFactory } from \"../utils\";\n\nexport type GetReminderResponse = ReminderGroup;\n\nexport const getReminderFactory = apiFactory<GetReminderResponse>()((api, ctx, utils) => {\n const serviceURL = utils.makeURL(`${api.zpwServiceMap.group_board[0]}/api/board/topic/getReminder`);\n\n /**\n * Get reminder details from a group\n *\n * @param reminderId Reminder ID\n *\n * @throws {ZaloApiError}\n */\n return async function getReminder(reminderId: string) {\n const params = {\n eventId: reminderId,\n imei: ctx.imei,\n };\n\n const encryptedParams = utils.encodeAES(JSON.stringify(params));\n if (!encryptedParams) throw new ZaloApiError(\"Failed to encrypt params\");\n\n const response = await utils.request(utils.makeURL(serviceURL, { params: encryptedParams }), {\n method: \"GET\",\n });\n\n return utils.resolve(response);\n };\n});\n","import { ZaloApiError } from \"../Errors/ZaloApiError\";\nimport { apiFactory } from \"../utils\";\n\nexport type GetReminderResponsesResponse = {\n rejectMember: string[];\n acceptMember: string[];\n};\n\nexport const getReminderResponsesFactory = apiFactory<GetReminderResponsesResponse>()((api, _ctx, utils) => {\n const serviceURL = utils.makeURL(`${api.zpwServiceMap.group_board[0]}/api/board/topic/listResponseEvent`);\n\n /**\n * Get reminder responses\n *\n * @param reminderId reminder id\n *\n * @throws {ZaloApiError}\n */\n return async function getReminderResponses(reminderId: string) {\n const params = {\n eventId: reminderId,\n };\n\n const encryptedParams = utils.encodeAES(JSON.stringify(params));\n if (!encryptedParams) throw new ZaloApiError(\"Failed to encrypt params\");\n\n const response = await utils.request(utils.makeURL(serviceURL, { params: encryptedParams }), {\n method: \"GET\",\n });\n\n return utils.resolve(response);\n };\n});\n","import { ZaloApiError } from \"../Errors/ZaloApiError\";\nimport type { ZBusinessPackage } from \"../models/ZBusiness\";\nimport { apiFactory } from \"../utils\";\n\nexport type SentFriendRequestInfo = {\n userId: string;\n zaloName: string;\n displayName: string;\n avatar: string;\n globalId: string;\n bizPkg: ZBusinessPackage;\n fReqInfo: {\n message: string;\n src: number;\n time: number;\n };\n};\n\nexport type GetSentFriendRequestResponse = {\n [userId: string]: SentFriendRequestInfo;\n};\n\nexport const getSentFriendRequestFactory = apiFactory<GetSentFriendRequestResponse>()((api, ctx, utils) => {\n const serviceURL = utils.makeURL(`${api.zpwServiceMap.friend[0]}/api/friend/requested/list`);\n\n /**\n * Get friend requested\n *\n * @note Zalo might throw an error with code 112 if you have no friend requests.\n *\n * @throws {ZaloApiError}\n */\n return async function getSentFriendRequest() {\n const params = {\n imei: ctx.imei,\n };\n\n const encryptedParams = utils.encodeAES(JSON.stringify(params));\n if (!encryptedParams) throw new ZaloApiError(\"Failed to encrypt params\");\n\n const response = await utils.request(utils.makeURL(serviceURL, { params: encryptedParams }), {\n method: \"GET\",\n });\n\n return utils.resolve(response);\n };\n});\n","import { ZaloApiError } from \"../Errors/ZaloApiError\";\nimport type { UserSetting } from \"../models/index\";\nimport { apiFactory } from \"../utils\";\n\nexport type GetSettingsResponse = UserSetting;\n\nexport const getSettingsFactory = apiFactory<GetSettingsResponse>()((_api, _ctx, utils) => {\n const serviceURL = utils.makeURL(`https://wpa.chat.zalo.me/api/setting/me`);\n\n /**\n * Get my account settings\n *\n * @throws {ZaloApiError}\n */\n return async function getSettings() {\n const params = {};\n\n const encryptedParams = utils.encodeAES(JSON.stringify(params));\n if (!encryptedParams) throw new ZaloApiError(\"Failed to encrypt params\");\n\n const response = await utils.request(utils.makeURL(serviceURL, { params: encryptedParams }), {\n method: \"GET\",\n });\n\n return utils.resolve(response);\n };\n});\n","import { ZaloApiError } from \"../Errors/ZaloApiError\";\nimport { apiFactory } from \"../utils\";\n\ninterface StickerBasic {\n type: number;\n cate_id: number;\n sticker_id: number;\n}\n\ninterface StickerSuggestions {\n sugg_sticker: StickerBasic[] | null;\n sugg_guggy: StickerBasic[] | null;\n sugg_gif: StickerBasic[] | null;\n}\n\nexport const getStickersFactory = apiFactory<number[]>()((api, ctx, utils) => {\n const serviceURL = utils.makeURL(`${api.zpwServiceMap.sticker}/api/message/sticker`);\n\n /**\n * Get stickers by keyword\n *\n * @param keyword Keyword to search for\n * @returns Sticker IDs\n *\n * @throws {ZaloApiError}\n */\n return async function getStickers(keyword: string) {\n if (!keyword) throw new ZaloApiError(\"Missing keyword\");\n\n const params = {\n keyword: keyword,\n gif: 1,\n guggy: 0,\n imei: ctx.imei,\n };\n\n const encryptedParams = utils.encodeAES(JSON.stringify(params));\n if (!encryptedParams) throw new ZaloApiError(\"Failed to encrypt message\");\n\n const finalServiceUrl = new URL(serviceURL);\n finalServiceUrl.pathname = finalServiceUrl.pathname + \"/suggest/stickers\";\n\n const response = await utils.request(\n utils.makeURL(finalServiceUrl.toString(), {\n params: encryptedParams,\n }),\n );\n\n return utils.resolve(response, (result) => {\n const suggestions = result.data as StickerSuggestions;\n const stickerIds: number[] = [];\n\n // @TODO: Implement these\n // suggestions.sugg_guggy, suggestions.sugg_gif\n if (suggestions.sugg_sticker)\n suggestions.sugg_sticker.forEach((sticker) => stickerIds.push(sticker.sticker_id));\n\n return stickerIds;\n });\n };\n});\n","import { ZaloApiError } from \"../Errors/ZaloApiError\";\nimport castArray from \"lodash/castArray\";\n\nimport { apiFactory, resolveResponse } from \"../utils\";\n\nexport type StickerDetail = {\n id: number;\n cateId: number;\n type: number;\n text: string;\n uri: string;\n fkey: number;\n status: number;\n stickerUrl: string;\n stickerSpriteUrl: string;\n stickerWebpUrl: unknown;\n totalFrames: number;\n duration: number;\n effectId: number;\n checksum: string;\n ext: number;\n source: number;\n fss: unknown;\n fssInfo: unknown;\n version: number;\n extInfo: unknown;\n};\n\nexport type StickerDetailResponse = StickerDetail[];\n\nexport const getStickersDetailFactory = apiFactory<StickerDetailResponse>()((api, ctx, utils) => {\n const serviceURL = utils.makeURL(`${api.zpwServiceMap.sticker}/api/message/sticker/sticker_detail`);\n\n /**\n * Get stickers detail by sticker IDs\n *\n * @param stickerIds Sticker IDs to search for\n *\n * @throws {ZaloApiError}\n */\n return async function getStickersDetail(stickerIds: number | number[]) {\n if (!stickerIds) throw new ZaloApiError(\"Missing sticker id\");\n const stickerIdsArray = castArray(stickerIds);\n if (stickerIdsArray.length == 0) throw new ZaloApiError(\"Missing sticker id\");\n\n const stickers: StickerDetailResponse = [];\n const tasks = stickerIdsArray.map((stickerId) => getStickerDetail(stickerId));\n const tasksResult = await Promise.allSettled(tasks);\n tasksResult.forEach((result) => {\n if (result.status === \"fulfilled\") stickers.push(result.value);\n });\n\n return stickers;\n };\n\n async function getStickerDetail(stickerId: number) {\n const params = {\n sid: stickerId,\n };\n\n const encryptedParams = utils.encodeAES(JSON.stringify(params));\n if (!encryptedParams) throw new ZaloApiError(\"Failed to encrypt message\");\n\n const response = await utils.request(\n utils.makeURL(serviceURL, {\n params: encryptedParams,\n }),\n );\n\n return resolveResponse<StickerDetail>(ctx, response);\n }\n});\n","import { ZaloApiError } from \"../Errors/ZaloApiError\";\nimport { apiFactory } from \"../utils\";\n\nexport type UnreadMark = {\n id: number;\n cliMsgId: number;\n fromUid: number;\n ts: number;\n};\n\nexport type GetUnreadMarkResponse = {\n data: {\n convsGroup: UnreadMark[];\n convsUser: UnreadMark[];\n };\n status: number;\n};\n\nexport const getUnreadMarkFactory = apiFactory<GetUnreadMarkResponse>()((api, _, utils) => {\n const serviceURL = utils.makeURL(`${api.zpwServiceMap.conversation[0]}/api/conv/getUnreadMark`);\n\n /**\n * Get unread mark\n *\n * @throws {ZaloApiError}\n *\n */\n return async function getUnreadMark() {\n const params = {};\n\n const encryptedParams = utils.encodeAES(JSON.stringify(params));\n if (!encryptedParams) throw new ZaloApiError(\"Failed to encrypt params\");\n\n const response = await utils.request(utils.makeURL(serviceURL, { params: encryptedParams }), {\n method: \"GET\",\n });\n\n return utils.resolve(response, (result) => {\n const data = result.data as { data: unknown; status: number };\n if (typeof data.data === \"string\") {\n return {\n data: JSON.parse(data.data) as GetUnreadMarkResponse[\"data\"],\n status: data.status,\n };\n }\n\n return data as GetUnreadMarkResponse;\n });\n };\n});\n","import { ZaloApiError } from \"../Errors/ZaloApiError\";\nimport castArray from \"lodash/castArray\";\n\nimport { apiFactory } from \"../utils\";\n\nimport type { User } from \"../models/index\";\n\nexport type ProfileInfo = User;\n\nexport type UserInfoResponse = {\n unchanged_profiles: Record<string, unknown>;\n phonebook_version: number;\n changed_profiles: Record<string, ProfileInfo>;\n};\n\nexport const getUserInfoFactory = apiFactory<UserInfoResponse>()((api, ctx, utils) => {\n const serviceURL = utils.makeURL(`${api.zpwServiceMap.profile[0]}/api/social/friend/getprofiles/v2`);\n\n /**\n * Get user info using user id\n *\n * @param userId user id\n *\n * @throws {ZaloApiError}\n */\n return async function getUserInfo(userId: string | string[]) {\n if (!userId) throw new ZaloApiError(\"Missing user id\");\n\n const userIds = castArray(userId);\n\n const processedUserIds = userIds.map((id) => {\n if (id.split(\"_\").length > 1) {\n return id;\n }\n return `${id}_0`;\n });\n\n const params = {\n phonebook_version: ctx.extraVer!.phonebook,\n friend_pversion_map: processedUserIds,\n avatar_size: 120,\n language: ctx.language,\n show_online_status: 1,\n imei: ctx.imei,\n };\n\n const encryptedParams = utils.encodeAES(JSON.stringify(params));\n if (!encryptedParams) throw new ZaloApiError(\"Failed to encrypt params\");\n\n const response = await utils.request(serviceURL, {\n method: \"POST\",\n body: new URLSearchParams({\n params: encryptedParams,\n }),\n });\n\n return utils.resolve(response);\n };\n});\n","import { ZaloApiError } from \"../Errors/ZaloApiError\";\nimport castArray from \"lodash/castArray\";\n\nimport { apiFactory } from \"../utils\";\n\nexport type InviteUserToGroupsResponse = {\n grid_message_map: {\n [groupId: string]: {\n error_code: number;\n error_message: string;\n data: string | null;\n };\n };\n};\n\nexport const inviteUserToGroupsFactory = apiFactory<InviteUserToGroupsResponse>()((api, ctx, utils) => {\n const serviceURL = utils.makeURL(`${api.zpwServiceMap.group[0]}/api/group/invite/multi`);\n\n /**\n * Invite user to group\n *\n * @param groupId group ID(s)\n * @param memberId member ID\n *\n * @throws {ZaloApiError}\n *\n */\n return async function inviteUserToGroups(userId: string, groupId: string | string[]) {\n const params = {\n grids: castArray(groupId),\n member: userId,\n memberType: -1,\n srcInteraction: 2,\n clientLang: ctx.language,\n };\n\n const encryptedParams = utils.encodeAES(JSON.stringify(params));\n if (!encryptedParams) throw new ZaloApiError(\"Failed to encrypt params\");\n\n const response = await utils.request(utils.makeURL(serviceURL, { params: encryptedParams }), {\n method: \"GET\",\n });\n\n return utils.resolve(response);\n };\n});\n","import { ZaloApiError } from \"../Errors/ZaloApiError\";\nimport { apiFactory } from \"../utils\";\n\nexport type JoinGroupInviteBoxResponse = \"\";\n\nexport const joinGroupInviteBoxFactory = apiFactory<JoinGroupInviteBoxResponse>()((api, ctx, utils) => {\n const serviceURL = utils.makeURL(`${api.zpwServiceMap.group[0]}/api/group/inv-box/join`);\n\n /**\n * Join group invite box\n *\n * @param groupId - The group id\n *\n * @throws {ZaloApiError}\n */\n return async function joinGroupInviteBox(groupId: string) {\n const params = {\n grid: groupId,\n lang: ctx.language,\n };\n\n const encryptedParams = utils.encodeAES(JSON.stringify(params));\n if (!encryptedParams) throw new ZaloApiError(\"Failed to encrypt params\");\n\n const response = await utils.request(utils.makeURL(serviceURL, { params: encryptedParams }), {\n method: \"GET\",\n });\n\n return utils.resolve(response);\n };\n});\n","import { ZaloApiError } from \"../Errors/ZaloApiError\";\nimport { apiFactory } from \"../utils\";\n\nexport type JoinGroupLinkResponse = \"\";\n\nexport const joinGroupLinkFactory = apiFactory<JoinGroupLinkResponse>()((api, ctx, utils) => {\n const serviceURL = utils.makeURL(`${api.zpwServiceMap.group[0]}/api/group/link/join`);\n\n /**\n * Join group via invite link\n *\n * @note Zalo might throw an error with code 240 if the group enabled membership approval, 178 if you are already a member.\n *\n * @param link - The link join group\n *\n * @throws {ZaloApiError}\n */\n return async function joinGroupLink(link: string) {\n const params = {\n link: link,\n clientLang: ctx.language,\n };\n\n const encryptedParams = utils.encodeAES(JSON.stringify(params));\n if (!encryptedParams) throw new ZaloApiError(\"Failed to encrypt params\");\n\n const response = await utils.request(utils.makeURL(serviceURL, { params: encryptedParams }), {\n method: \"GET\",\n });\n\n return utils.resolve(response);\n };\n});\n","import { ZaloApiError } from \"../Errors/ZaloApiError\";\nimport { apiFactory } from \"../utils\";\n\nexport type KeepAliveResponse = { config_vesion: number };\n\nexport const keepAliveFactory = apiFactory<KeepAliveResponse>()((api, ctx, utils) => {\n const serviceURL = utils.makeURL(`${api.zpwServiceMap.chat[0]}/keepalive`);\n\n /**\n * Keep Alive?\n *\n * @throws {ZaloApiError}\n */\n return async function keepAlive() {\n const params = {\n imei: ctx.imei,\n };\n\n const encryptedParams = utils.encodeAES(JSON.stringify(params));\n if (!encryptedParams) throw new ZaloApiError(\"Failed to encrypt params\");\n\n const response = await utils.request(utils.makeURL(serviceURL, { params: encryptedParams }), {\n method: \"GET\",\n });\n\n return utils.resolve(response, undefined, false);\n };\n});\n","import { ZaloApiError } from \"../Errors/ZaloApiError\";\nimport { apiFactory } from \"../utils\";\n\nexport type LastOnlineResponse = {\n settings: {\n show_online_status: boolean;\n };\n lastOnline: number;\n};\n\nexport const lastOnlineFactory = apiFactory<LastOnlineResponse>()((api, ctx, utils) => {\n const serviceURL = utils.makeURL(`${api.zpwServiceMap.profile[0]}/api/social/profile/lastOnline`);\n\n /**\n * Get last online\n *\n * @param uid User ID\n *\n * @throws {ZaloApiError}\n */\n return async function lastOnline(uid: string) {\n const params = {\n uid: uid,\n conv_type: 1,\n imei: ctx.imei,\n };\n\n const encryptedParams = utils.encodeAES(JSON.stringify(params));\n if (!encryptedParams) throw new ZaloApiError(\"Failed to encrypt params\");\n\n const response = await utils.request(utils.makeURL(serviceURL, { params: encryptedParams }), {\n method: \"GET\",\n });\n\n return utils.resolve(response);\n };\n});\n","import { ZaloApiError } from \"../Errors/ZaloApiError\";\nimport { apiFactory } from \"../utils\";\n\nexport type LeaveGroupResponse = {\n memberError: unknown[];\n};\n\nexport const leaveGroupFactory = apiFactory<LeaveGroupResponse>()((api, ctx, utils) => {\n const serviceURL = utils.makeURL(`${api.zpwServiceMap.group[0]}/api/group/leave`);\n\n /**\n * Leave group\n *\n * @param groupId - groupId to leave\n * @param silent - Turn on/off silent leave group\n *\n * @note Zalo might throw an error with code 166 if you are not a member of the group\n *\n * @throws {ZaloApiError}\n */\n return async function leaveGroup(groupId: string, silent: boolean = false) {\n const requestParams = {\n grids: [groupId], // API only supports leaving one group at a time\n imei: ctx.imei,\n silent: silent ? 1 : 0,\n language: ctx.language,\n };\n\n const encryptedParams = utils.encodeAES(JSON.stringify(requestParams));\n if (!encryptedParams) throw new ZaloApiError(\"Failed to encrypt params\");\n\n const response = await utils.request(serviceURL, {\n method: \"POST\",\n body: new URLSearchParams({\n params: encryptedParams,\n }),\n });\n\n return utils.resolve(response);\n };\n});\n","import { ZaloApiError } from \"../Errors/ZaloApiError\";\nimport { apiFactory } from \"../utils\";\n\nexport type LockPollResponse = \"\";\n\nexport const lockPollFactory = apiFactory<LockPollResponse>()((api, ctx, utils) => {\n const serviceURL = utils.makeURL(`${api.zpwServiceMap.group[0]}/api/poll/end`);\n\n /**\n * Lock a poll, preventing further votes.\n *\n * @param pollId Poll id to lock\n *\n * @throws {ZaloApiError}\n */\n return async function lockPoll(pollId: number) {\n const params = {\n poll_id: pollId,\n imei: ctx.imei,\n };\n\n const encryptedParams = utils.encodeAES(JSON.stringify(params));\n if (!encryptedParams) throw new ZaloApiError(\"Failed to encrypt params\");\n\n const response = await utils.request(serviceURL, {\n method: \"POST\",\n body: new URLSearchParams({\n params: encryptedParams,\n }),\n });\n\n return utils.resolve(response);\n };\n});\n","import { ZaloApiError } from \"../Errors/ZaloApiError\";\nimport { apiFactory } from \"../utils\";\n\nexport type ParseLinkErrorMaps = Record<string, number>;\n\nexport type ParseLinkResponse = {\n data: {\n thumb: string;\n title: string;\n desc: string;\n src: string;\n href: string;\n media: {\n type: number;\n count: number;\n mediaTitle: string;\n artist: string;\n streamUrl: string;\n stream_icon: string;\n };\n stream_icon: string;\n };\n error_maps: ParseLinkErrorMaps;\n};\n\nexport const parseLinkFactory = apiFactory<ParseLinkResponse>()((api, ctx, utils) => {\n const serviceURL = utils.makeURL(`${api.zpwServiceMap.file[0]}/api/message/parselink`);\n\n /**\n * Parse link\n *\n * @param link link to parse\n *\n * @throws {ZaloApiError}\n *\n */\n return async function parseLink(link: string) {\n const params = {\n link,\n version: 1, // version 0 is not available errorMaps || version 1 is errorMaps (for response)\n imei: ctx.imei,\n };\n\n const encryptedParams = utils.encodeAES(JSON.stringify(params));\n if (!encryptedParams) throw new ZaloApiError(\"Failed to encrypt params\");\n\n const response = await utils.request(utils.makeURL(serviceURL, { params: encryptedParams }), {\n method: \"GET\",\n });\n\n return utils.resolve(response);\n };\n});\n","import { ZaloApiError } from \"../Errors/ZaloApiError\";\nimport { apiFactory } from \"../utils\";\n\nexport type RejectFriendRequestResponse = \"\";\n\nexport const rejectFriendRequestFactory = apiFactory<RejectFriendRequestResponse>()((api, _ctx, utils) => {\n const serviceURL = utils.makeURL(`${api.zpwServiceMap.friend[0]}/api/friend/reject`);\n\n /**\n * Reject a friend request from a User\n *\n * @param friendId \n *\n * @throws {ZaloApiError}\n */\n return async function rejectFriendRequest(friendId: string) {\n const params = {\n fid: friendId,\n };\n\n const encryptedParams = utils.encodeAES(JSON.stringify(params));\n if (!encryptedParams) throw new ZaloApiError(\"Failed to encrypt params\");\n\n const response = await utils.request(serviceURL, {\n method: \"POST\",\n body: new URLSearchParams({\n params: encryptedParams,\n }),\n });\n\n return utils.resolve(response);\n };\n});\n","import { ZaloApiError } from \"../Errors/ZaloApiError\";\nimport { apiFactory } from \"../utils\";\n\nexport type RemoveFriendResponse = \"\";\n\nexport const removeFriendFactory = apiFactory<RemoveFriendResponse>()((api, ctx, utils) => {\n const serviceURL = utils.makeURL(`${api.zpwServiceMap.friend[0]}/api/friend/remove`);\n\n /**\n * Remove friend\n *\n * @param friendId - ID of the friend to remove\n *\n * @throws {ZaloApiError}\n */\n return async function removeFriend(friendId: string) {\n const params = {\n fid: friendId,\n imei: ctx.imei,\n };\n\n const encryptedParams = utils.encodeAES(JSON.stringify(params));\n if (!encryptedParams) throw new ZaloApiError(\"Failed to encrypt params\");\n\n const response = await utils.request(serviceURL, {\n method: \"POST\",\n body: new URLSearchParams({\n params: encryptedParams,\n }),\n });\n\n return utils.resolve(response);\n };\n});\n","import { ZaloApiError } from \"../Errors/ZaloApiError\";\nimport { apiFactory } from \"../utils\";\n\nexport type RemoveFriendAliasResponse = \"\";\n\nexport const removeFriendAliasFactory = apiFactory<RemoveFriendAliasResponse>()((api, _ctx, utils) => {\n const serviceURL = utils.makeURL(`${api.zpwServiceMap.alias[0]}/api/alias/remove`);\n\n /**\n * Remove friend's alias\n *\n * @param friendId friend id\n *\n * @throws {ZaloApiError}\n */\n return async function removeFriendAlias(friendId: string) {\n const params = {\n friendId: friendId,\n };\n\n const encryptedParams = utils.encodeAES(JSON.stringify(params));\n if (!encryptedParams) throw new ZaloApiError(\"Failed to encrypt params\");\n\n const response = await utils.request(utils.makeURL(serviceURL, { params: encryptedParams }), {\n method: \"GET\",\n });\n\n return utils.resolve(response);\n };\n});\n","import { ZaloApiError } from \"../Errors/ZaloApiError\";\nimport castArray from \"lodash/castArray\";\n\nimport { apiFactory } from \"../utils\";\n\nexport type RemoveGroupBlockedMemberResponse = \"\";\n\nexport const removeGroupBlockedMemberFactory = apiFactory<RemoveGroupBlockedMemberResponse>()((api, _, utils) => {\n const serviceURL = utils.makeURL(`${api.zpwServiceMap.group[0]}/api/group/blockedmems/remove`);\n\n /**\n * Remove group blocked member\n *\n * @param memberId member id(s)\n * @param groupId group id\n *\n * @throws {ZaloApiError}\n */\n return async function removeGroupBlockedMember(memberId: string | string[], groupId: string) {\n const memberIds = castArray(memberId);\n\n const params = {\n grid: groupId,\n members: memberIds,\n };\n\n const encryptedParams = utils.encodeAES(JSON.stringify(params));\n if (!encryptedParams) throw new ZaloApiError(\"Failed to encrypt params\");\n\n const response = await utils.request(utils.makeURL(serviceURL, { params: encryptedParams }), {\n method: \"GET\",\n });\n\n return utils.resolve(response);\n };\n});\n","import { ZaloApiError } from \"../Errors/ZaloApiError\";\nimport castArray from \"lodash/castArray\";\n\nimport { apiFactory } from \"../utils\";\n\nexport type RemoveGroupDeputyResponse = \"\";\n\nexport const removeGroupDeputyFactory = apiFactory<RemoveGroupDeputyResponse>()((api, ctx, utils) => {\n const serviceURL = utils.makeURL(`${api.zpwServiceMap.group[0]}/api/group/admins/remove`);\n\n /**\n * Remove group deputy\n *\n * @param memberId user Id or list of user Ids\n * @param groupId group Id\n *\n * @throws {ZaloApiError}\n *\n */\n return async function removeGroupDeputy(memberId: string | string[], groupId: string) {\n const memberIds = castArray(memberId);\n\n const params = {\n grid: groupId,\n members: memberIds,\n imei: ctx.imei,\n };\n\n const encryptedParams = utils.encodeAES(JSON.stringify(params));\n if (!encryptedParams) throw new ZaloApiError(\"Failed to encrypt params\");\n\n const response = await utils.request(utils.makeURL(serviceURL, { params: encryptedParams }), {\n method: \"GET\",\n });\n\n return utils.resolve(response);\n };\n});\n","import { ZaloApiError } from \"../Errors/ZaloApiError\";\nimport castArray from \"lodash/castArray\";\n\nimport { apiFactory } from \"../utils\";\n\nexport type RemoveQuickMessageResponse = {\n itemIds: number[];\n version: number;\n};\n\nexport const removeQuickMessageFactory = apiFactory<RemoveQuickMessageResponse>()((api, _ctx, utils) => {\n const serviceURL = utils.makeURL(`${api.zpwServiceMap.quick_message[0]}/api/quickmessage/delete`);\n\n /**\n * Remove quick message\n *\n * @param itemIds - The id(s) of the quick message(s) to remove (number or number[])\n *\n * @note Zalo might throw an error with code 212 if the item does not exist\n *\n * @throws {ZaloApiError}\n */\n return async function removeQuickMessage(itemIds: number | number[]) {\n const idsArray = castArray(itemIds);\n\n const params = {\n itemIds: idsArray,\n };\n\n const encryptedParams = utils.encodeAES(JSON.stringify(params));\n if (!encryptedParams) throw new ZaloApiError(\"Failed to encrypt params\");\n\n const response = await utils.request(utils.makeURL(serviceURL, { params: encryptedParams }), {\n method: \"GET\",\n });\n\n return utils.resolve(response);\n };\n});\n","import { ZaloApiError } from \"../Errors/ZaloApiError\";\nimport { ThreadType } from \"../models/index\";\nimport { apiFactory } from \"../utils\";\n\nexport type RemoveReminderResponse = \"\" | number;\n\nexport const removeReminderFactory = apiFactory<RemoveReminderResponse>()((api, ctx, utils) => {\n const serviceURL = {\n [ThreadType.User]: utils.makeURL(`${api.zpwServiceMap.group_board[0]}/api/board/oneone/remove`),\n [ThreadType.Group]: utils.makeURL(`${api.zpwServiceMap.group_board[0]}/api/board/topic/remove`),\n };\n\n /**\n * Remove a reminder in a (user/group)\n *\n * @param reminderId Reminder ID to remove reminder from\n * @param threadId (User/Group) ID to remove reminder from\n * @param type Thread type (User or Group)\n *\n * @throws {ZaloApiError}\n */\n return async function removeReminder(reminderId: string, threadId: string, type: ThreadType = ThreadType.User) {\n const params =\n type === ThreadType.User\n ? {\n uid: threadId,\n reminderId: reminderId,\n }\n : {\n grid: threadId,\n topicId: reminderId,\n imei: ctx.imei,\n };\n\n const encryptedParams = utils.encodeAES(JSON.stringify(params));\n if (!encryptedParams) throw new ZaloApiError(\"Failed to encrypt params\");\n\n const response = await utils.request(serviceURL[type], {\n method: \"POST\",\n body: new URLSearchParams({\n params: encryptedParams,\n }),\n });\n\n return utils.resolve(response);\n };\n});\n","import { ZaloApiError } from \"../Errors/ZaloApiError\";\nimport { ThreadType } from \"../models/index\";\nimport { apiFactory } from \"../utils\";\n\nexport type RemoveUnreadMarkResponse = {\n data: {\n updateId: number;\n };\n status: number;\n};\n\nexport const removeUnreadMarkFactory = apiFactory<RemoveUnreadMarkResponse>()((api, ctx, utils) => {\n const serviceURL = utils.makeURL(`${api.zpwServiceMap.conversation[0]}/api/conv/removeUnreadMark`);\n\n /**\n * Remove unread mark from conversation\n *\n * @param threadId Thread ID\n * @param type Thread type (User/Group)\n *\n * @throws {ZaloApiError}\n */\n return async function removeUnreadMark(threadId: string, type: ThreadType = ThreadType.User) {\n const timestamp = Date.now();\n\n const isGroup = type === ThreadType.Group;\n const requestParams = {\n param: JSON.stringify({\n [isGroup ? \"convsGroup\" : \"convsUser\"]: [threadId],\n [isGroup ? \"convsUser\" : \"convsGroup\"]: [],\n [isGroup ? \"convsGroupData\" : \"convsUserData\"]: [\n {\n id: threadId,\n ts: timestamp,\n },\n ],\n [isGroup ? \"convsUserData\" : \"convsGroupData\"]: [],\n }),\n };\n\n const encryptedParams = utils.encodeAES(JSON.stringify(requestParams));\n if (!encryptedParams) throw new ZaloApiError(\"Failed to encrypt params\");\n\n const response = await utils.request(serviceURL, {\n method: \"POST\",\n body: new URLSearchParams({\n params: encryptedParams,\n }),\n });\n\n return utils.resolve(response, (result) => {\n const data = result.data as { data: unknown; status: number };\n if (typeof data.data === \"string\") {\n return {\n data: JSON.parse(data.data),\n status: data.status,\n };\n }\n\n return result.data as RemoveUnreadMarkResponse;\n });\n };\n});\n","import { ZaloApiError } from \"../Errors/ZaloApiError\";\nimport castArray from \"lodash/castArray\";\n\nimport { apiFactory } from \"../utils\";\n\nexport type RemoveUserFromGroupResponse = {\n errorMembers: string[];\n};\n\nexport const removeUserFromGroupFactory = apiFactory<RemoveUserFromGroupResponse>()((api, ctx, utils) => {\n const serviceURL = utils.makeURL(`${api.zpwServiceMap.group[0]}/api/group/kickout`);\n\n /**\n * Remove user from existing group\n *\n * @param memberId User ID or list of user IDs to remove\n * @param groupId Group ID\n *\n * @note Zalo might throw an error with code 165 if the user is not in the group, 166 if you don't have enough permissions or is not in the group\n *\n * @throws {ZaloApiError}\n */\n return async function removeUserFromGroup(memberId: string | string[], groupId: string) {\n const memberIds = castArray(memberId);\n\n const params = {\n grid: groupId,\n members: memberIds,\n imei: ctx.imei,\n };\n\n const encryptedParams = utils.encodeAES(JSON.stringify(params));\n if (!encryptedParams) throw new ZaloApiError(\"Failed to encrypt params\");\n\n const response = await utils.request(serviceURL, {\n method: \"POST\",\n body: new URLSearchParams({\n params: encryptedParams,\n }),\n });\n\n return utils.resolve(response);\n };\n});\n","import { ZaloApiError } from \"../Errors/ZaloApiError\";\nimport { apiFactory } from \"../utils\";\n\nexport type ResetHiddenConversPinResponse = \"\";\n\nexport const resetHiddenConversPinFactory = apiFactory<ResetHiddenConversPinResponse>()((api, _ctx, utils) => {\n const serviceURL = utils.makeURL(`${api.zpwServiceMap.conversation[0]}/api/hiddenconvers/reset`);\n\n /**\n * Reset hidden conversation pin\n *\n * @throws {ZaloApiError}\n */\n return async function resetHiddenConversPin() {\n const params = {};\n\n const encryptedParams = utils.encodeAES(JSON.stringify(params));\n if (!encryptedParams) throw new ZaloApiError(\"Failed to encrypt params\");\n\n const response = await utils.request(utils.makeURL(serviceURL, { params: encryptedParams }), {\n method: \"GET\",\n });\n\n return utils.resolve(response);\n };\n});\n","import { ZaloApiError } from \"../Errors/ZaloApiError\";\nimport { apiFactory } from \"../utils\";\n\nexport type ReuseAvatarResponse = null;\n\nexport const reuseAvatarFactory = apiFactory<ReuseAvatarResponse>()((api, ctx, utils) => {\n const serviceURL = utils.makeURL(`${api.zpwServiceMap.profile[0]}/api/social/reuse-avatar`);\n\n /**\n * Reuse avatar\n *\n * @param photoId photo id from getAvatarList api\n *\n * @throws {ZaloApiError}\n */\n return async function reuseAvatar(photoId: string) {\n const params = {\n photoId: photoId,\n isPostSocial: 0,\n imei: ctx.imei,\n };\n\n const encryptedParams = utils.encodeAES(JSON.stringify(params));\n if (!encryptedParams) throw new ZaloApiError(\"Failed to encrypt params\");\n\n const response = await utils.request(utils.makeURL(serviceURL, { params: encryptedParams }), {\n method: \"GET\",\n });\n\n return utils.resolve(response);\n };\n});\n","import { ZaloApiError } from \"../Errors/ZaloApiError\";\nimport castArray from \"lodash/castArray\";\n\nimport { apiFactory } from \"../utils\";\n\nexport type ReviewPendingMemberRequestPayload = {\n members: string | string[];\n isApprove: boolean;\n};\n\nexport enum ReviewPendingMemberRequestStatus {\n SUCCESS = 0,\n NOT_IN_PENDING_LIST = 170,\n ALREADY_IN_GROUP = 178,\n INSUFFICIENT_PERMISSION = 166,\n}\n\nexport type ReviewPendingMemberRequestResponse = {\n [memberId: string]: ReviewPendingMemberRequestStatus;\n};\n\nexport const reviewPendingMemberRequestFactory = apiFactory<ReviewPendingMemberRequestResponse>()((api, _, utils) => {\n const serviceURL = utils.makeURL(`${api.zpwServiceMap.group[0]}/api/group/pending-mems/review`);\n\n /**\n * Review pending member(s) request\n *\n * @param payload - The payload containing data to review the pending member(s) request\n * @param groupId - The id of the group to review the pending member(s) request\n *\n * @note Only the group leader and deputy group leader can review\n *\n * @throws {ZaloApiError}\n */\n return async function reviewPendingMemberRequest(payload: ReviewPendingMemberRequestPayload, groupId: string) {\n const members = castArray(payload.members);\n\n const params = {\n grid: groupId,\n members: members,\n isApprove: payload.isApprove ? 1 : 0, // 1: approve, 0: reject\n };\n\n const encryptedParams = utils.encodeAES(JSON.stringify(params));\n if (!encryptedParams) throw new ZaloApiError(\"Failed to encrypt params\");\n\n const response = await utils.request(utils.makeURL(serviceURL, { params: encryptedParams }), {\n method: \"GET\",\n });\n\n return utils.resolve(response);\n };\n});\n","import { ZaloApiError } from \"../Errors/ZaloApiError\";\nimport type { BinBankCard } from \"../models/index\";\nimport { ThreadType } from \"../models/index\";\nimport { apiFactory } from \"../utils\";\n\nexport type SendBankCardPayload = {\n binBank: BinBankCard;\n numAccBank: string;\n nameAccBank?: string;\n};\n\nexport type SendBankCardResponse = \"\";\n\nexport const sendBankCardFactory = apiFactory<SendBankCardResponse>()((api, ctx, utils) => {\n const serviceURL = utils.makeURL(`${api.zpwServiceMap.zimsg[0]}/api/transfer/card`);\n\n /**\n * Send bank card\n *\n * @param payload The payload containing the bank card information\n * @param threadId The ID of the thread to send the bank card to\n * @param type The type of thread to send the bank card to\n *\n * @throws {ZaloApiError}\n */\n return async function sendBankCard(payload: SendBankCardPayload, threadId: string, type: ThreadType = ThreadType.User) {\n const params = {\n binBank: payload.binBank,\n numAccBank: payload.numAccBank,\n nameAccBank: payload.nameAccBank?.toUpperCase() || \"---\",\n cliMsgId: Date.now().toString(),\n tsMsg: Date.now(),\n destUid: threadId,\n destType: type === ThreadType.Group ? 1 : 0,\n };\n\n const encryptedParams = utils.encodeAES(JSON.stringify(params));\n if (!encryptedParams) throw new ZaloApiError(\"Failed to encrypt params\");\n\n const response = await utils.request(serviceURL, {\n method: \"POST\",\n body: new URLSearchParams({\n params: encryptedParams,\n }),\n });\n\n return utils.resolve(response);\n };\n});\n","import { ZaloApiError } from \"../Errors/ZaloApiError\";\nimport { ThreadType } from \"../models/index\";\nimport { apiFactory } from \"../utils\";\n\nexport type SendCardOptions = {\n userId: string;\n phoneNumber?: string;\n ttl?: number;\n};\n\nexport type SendCardResponse = {\n msgId: number;\n};\n\nexport const sendCardFactory = apiFactory<SendCardResponse>()((api, ctx, utils) => {\n const serviceURL = {\n [ThreadType.User]: utils.makeURL(`${api.zpwServiceMap.file[0]}/api/message/forward`),\n [ThreadType.Group]: utils.makeURL(`${api.zpwServiceMap.file[0]}/api/group/forward`),\n };\n\n /**\n * Send a card to a User - Group\n *\n * @param userId Unique ID for Card\n * @param phoneNumber Optional phone number for sending card to a User\n * @param ttl Time to live in milliseconds (default: 0)\n * @param threadId ID of the conversation\n * @param type Message type (User or GroupMessage)\n *\n * @throws {ZaloApiError}\n *\n */\n return async function sendCard(options: SendCardOptions, threadId: string, type: ThreadType = ThreadType.User) {\n const data = await api.getQR(options.userId);\n const QRCodeURL = data[options.userId];\n const clientId = Date.now().toString();\n\n const params: Record<string, unknown> = {\n ttl: options.ttl ?? 0,\n msgType: 6,\n clientId: clientId,\n msgInfo: {\n contactUid: options.userId,\n qrCodeUrl: QRCodeURL,\n },\n };\n\n if (options.phoneNumber) {\n (params.msgInfo as Record<string, string>).phone = options.phoneNumber;\n }\n\n if (type == ThreadType.Group) {\n params.visibility = 0;\n params.grid = threadId;\n } else {\n params.toId = threadId;\n params.imei = ctx.imei;\n }\n\n const msgInfoStringified = JSON.stringify(params.msgInfo);\n params.msgInfo = msgInfoStringified;\n\n const encryptedParams = utils.encodeAES(JSON.stringify(params));\n if (!encryptedParams) throw new ZaloApiError(\"Failed to encrypt params\");\n\n const response = await utils.request(serviceURL[type], {\n method: \"POST\",\n body: new URLSearchParams({\n params: encryptedParams,\n }),\n });\n\n return utils.resolve(response);\n };\n});\n","import { ZaloApiError } from \"../Errors/ZaloApiError\";\nimport castArray from \"lodash/castArray\";\n\nimport { MAX_MESSAGES_PER_SEND } from \"../context\";\nimport { ThreadType } from \"../models/index\";\nimport { apiFactory } from \"../utils\";\n\nexport type SendDeliveredEventResponse = \"\" | { status: number };\n\nexport type SendDeliveredEventMessageParams = {\n msgId: string;\n cliMsgId: string;\n uidFrom: string;\n idTo: string;\n msgType: string;\n st: number;\n at: number;\n cmd: number;\n ts: string | number;\n};\n\ntype RequestMessageParams = {\n gmi: string;\n cmi: string;\n si: string;\n di: string;\n mt: string;\n st: number;\n at: number;\n cmd: number;\n ts: number;\n};\n\ntype MsgInfos = {\n seen: number;\n data: RequestMessageParams[];\n grid?: string; // Optional, any random value works\n};\n\nexport const sendDeliveredEventFactory = apiFactory<SendDeliveredEventResponse>()((api, ctx, utils) => {\n const serviceURL = {\n [ThreadType.User]: utils.makeURL(`${api.zpwServiceMap.chat[0]}/api/message/deliveredv2`),\n [ThreadType.Group]: utils.makeURL(`${api.zpwServiceMap.group[0]}/api/group/deliveredv2`),\n };\n\n /**\n * Send message delivered event\n *\n * @param isSeen Whether the message is seen or not\n * @param messages List of messages to send delivered event\n * @param type Messages type (User or Group), defaults to User\n *\n * @throws {ZaloApiError}\n */\n return async function sendDeliveredEvent(\n isSeen: boolean,\n messages: SendDeliveredEventMessageParams | SendDeliveredEventMessageParams[],\n type: ThreadType = ThreadType.User,\n ) {\n if (!messages) throw new ZaloApiError(\"messages are missing or not in a valid array format.\");\n const messagesArray = castArray(messages);\n if (messagesArray.length === 0 || messagesArray.length > MAX_MESSAGES_PER_SEND)\n throw new ZaloApiError(\"messages must contain between 1 and 50 messages.\");\n\n // 27/02/2025\n // This can send messages from multiple groups, but to prevent potential issues,\n // we will restrict it to sending messages only within the same group.\n const idTo = messagesArray[0].idTo;\n if (type === ThreadType.Group && !messagesArray.every((msg) => msg.idTo === idTo))\n throw new ZaloApiError(\"All messages must have the same idTo for Group thread\");\n\n const msgInfos: MsgInfos = {\n seen: isSeen ? 1 : 0,\n data: messagesArray.map((msg) => ({\n cmi: msg.cliMsgId,\n gmi: msg.msgId,\n si: msg.uidFrom,\n di: msg.idTo === ctx.uid ? \"0\" : msg.idTo,\n mt: msg.msgType,\n st: msg.st || 0 === msg.st ? 0 : -1,\n at: msg.at || 0 === msg.at ? 0 : -1,\n cmd: msg.cmd || 0 === msg.cmd ? 0 : -1,\n ts: parseInt(`${msg.ts}`) || 0 === parseInt(`${msg.ts}`) ? 0 : -1,\n })),\n ...(type === ThreadType.User ? {} : { grid: idTo }),\n };\n\n const params = {\n msgInfos: JSON.stringify(msgInfos),\n ...(type === ThreadType.User ? {} : { imei: ctx.imei }),\n };\n\n const encryptedParams = utils.encodeAES(JSON.stringify(params));\n if (!encryptedParams) throw new ZaloApiError(\"Failed to encrypt params\");\n\n const response = await utils.request(serviceURL[type], {\n method: \"POST\",\n body: new URLSearchParams({\n params: encryptedParams,\n }),\n });\n\n return utils.resolve(response);\n };\n});\n","import { ZaloApiError } from \"../Errors/ZaloApiError\";\nimport { apiFactory } from \"../utils\";\n\nexport type SendFriendRequestResponse = \"\";\n\nexport const sendFriendRequestFactory = apiFactory<SendFriendRequestResponse>()((api, ctx, utils) => {\n const serviceURL = utils.makeURL(`${api.zpwServiceMap.friend[0]}/api/friend/sendreq`);\n\n /**\n * Send a friend request to a user.\n *\n * @param msg message sent with friend request\n * @param userId User ID to send friend request to\n *\n * @note Zalo might throw an error with code 225 if the user is already friends with you,\n * 215 if the user might have blocked you,\n * 222 if user has already sent you a friend request, your request will be treated as acceptance instead.\n *\n * @throws {ZaloApiError}\n */\n return async function sendFriendRequest(msg: string, userId: string) {\n const params = {\n toid: userId,\n msg: msg,\n reqsrc: 30,\n imei: ctx.imei,\n language: ctx.language,\n srcParams: JSON.stringify({\n uidTo: userId,\n }),\n };\n\n const encryptedParams = utils.encodeAES(JSON.stringify(params));\n if (!encryptedParams) throw new ZaloApiError(\"Failed to encrypt params\");\n\n const response = await utils.request(serviceURL, {\n method: \"POST\",\n body: new URLSearchParams({\n params: encryptedParams,\n }),\n });\n\n return utils.resolve(response);\n };\n});\n","import { ZaloApiError } from \"../Errors/ZaloApiError\";\nimport { ThreadType } from \"../models/index\";\nimport { apiFactory } from \"../utils\";\n\nexport type SendLinkOptions = {\n msg?: string;\n link: string;\n ttl?: number;\n};\n\nexport type SendLinkResponse = {\n msgId: string;\n};\n\nexport const sendLinkFactory = apiFactory<SendLinkResponse>()((api, ctx, utils) => {\n const serviceURL = {\n [ThreadType.User]: utils.makeURL(`${api.zpwServiceMap.chat[0]}/api/message/link`, {\n nretry: 0,\n }),\n [ThreadType.Group]: utils.makeURL(`${api.zpwServiceMap.group[0]}/api/group/sendlink`, {\n nretry: 0,\n }),\n };\n\n /**\n * Send link\n *\n * @param options Link and ttl\n * @param threadId Thread ID\n * @param type Thread type\n *\n * @throws {ZaloApiError}\n */\n return async function sendLink(options: SendLinkOptions, threadId: string, type: ThreadType = ThreadType.User) {\n const res = await api.parseLink(options.link);\n\n const params: Record<string, unknown> = {\n msg:\n options.msg && options.msg.trim()\n ? options.msg.includes(options.link)\n ? options.msg\n : options.msg + \" \" + options.link\n : options.link,\n href: res.data.href,\n src: res.data.src,\n title: res.data.title,\n desc: res.data.desc,\n thumb: res.data.thumb,\n type: 2, // 0\n media: JSON.stringify(res.data.media),\n ttl: options.ttl ?? 0,\n clientId: Date.now(),\n };\n\n if (type == ThreadType.Group) {\n params.grid = threadId;\n params.imei = ctx.imei;\n // params.mentionInfo = \"[]\"; @TODO: implement this\n } else {\n params.toId = threadId;\n params.mentionInfo = \"\";\n }\n\n const encryptedParams = utils.encodeAES(JSON.stringify(params));\n if (!encryptedParams) throw new ZaloApiError(\"Failed to encrypt params\");\n\n const response = await utils.request(serviceURL[type], {\n method: \"POST\",\n body: new URLSearchParams({\n params: encryptedParams,\n }),\n });\n\n return utils.resolve(response);\n };\n});\n","import FormData from \"form-data\";\nimport castArray from \"lodash/castArray\";\nimport assign from \"lodash/assign\";\nimport isEmpty from \"lodash/isEmpty\";\n\nimport fs from \"node:fs/promises\";\nimport { ZaloApiError } from \"../Errors/ZaloApiError\";\nimport { ThreadType, type TMessage, type AttachmentSource } from \"../models/index\";\nimport {\n apiFactory,\n getClientMessageType,\n getFileExtension,\n getFileName,\n getGifMetaData,\n getMd5LargeFileObject,\n removeUndefinedKeys,\n resolveResponse,\n} from \"../utils\";\n\nexport type SendMessageResult = {\n msgId: number;\n};\n\nexport type SendMessageResponse = {\n message: SendMessageResult | null;\n attachment: SendMessageResult[];\n};\n\nexport type SendMessageQuote = {\n content: TMessage[\"content\"];\n msgType: TMessage[\"msgType\"];\n propertyExt: TMessage[\"propertyExt\"];\n\n uidFrom: TMessage[\"uidFrom\"];\n msgId: TMessage[\"msgId\"];\n cliMsgId: TMessage[\"cliMsgId\"];\n ts: TMessage[\"ts\"];\n ttl: TMessage[\"ttl\"];\n};\n\nconst attachmentUrlType = {\n image: \"photo_original/send?\",\n gif: \"gif?\",\n video: \"asyncfile/msg?\",\n others: \"asyncfile/msg?\",\n};\n\nfunction prepareQMSGAttach(quote: SendMessageQuote) {\n const quoteData = quote;\n if (typeof quoteData.content == \"string\") return quoteData.propertyExt;\n if (quoteData.msgType == \"chat.todo\")\n return {\n properties: {\n color: 0,\n size: 0,\n type: 0,\n subType: 0,\n ext: '{\"shouldParseLinkOrContact\":0}',\n },\n };\n\n return {\n ...quoteData.content,\n thumbUrl: quoteData.content.thumb,\n oriUrl: quoteData.content.href,\n normalUrl: quoteData.content.href,\n };\n}\n\nfunction prepareQMSG(quote: SendMessageQuote) {\n const quoteData = quote;\n if (quoteData.msgType == \"chat.todo\" && typeof quoteData.content == \"object\" && typeof quoteData.content.params == \"string\") {\n return JSON.parse(quoteData.content.params).item.content;\n }\n\n return \"\";\n}\n\ntype SendType = {\n url: string;\n body?: BodyInit | null;\n headers?: Record<string, string>;\n};\n\ntype UpthumbType = {\n hdUrl: string;\n clientFileId: string;\n url: string;\n fileId: string;\n};\n\ntype AttachmentData =\n | {\n query?: Record<string, string>;\n fileType: \"image\" | \"video\" | \"others\";\n body: URLSearchParams;\n params: Record<string, unknown>;\n }\n | {\n query?: Record<string, string>;\n fileType: \"gif\";\n body: Buffer;\n headers: Record<string, string>;\n };\n\nexport enum TextStyle {\n Bold = \"b\",\n Italic = \"i\",\n Underline = \"u\",\n StrikeThrough = \"s\",\n Red = \"c_db342e\",\n Orange = \"c_f27806\",\n Yellow = \"c_f7b503\",\n Green = \"c_15a85f\",\n Small = \"f_13\",\n Big = \"f_18\",\n UnorderedList = \"lst_1\",\n OrderedList = \"lst_2\",\n Indent = \"ind_$\",\n}\n\nexport type Style =\n | {\n start: number;\n len: number;\n st: Exclude<TextStyle, TextStyle.Indent>;\n }\n | {\n start: number;\n len: number;\n st: TextStyle.Indent;\n /**\n * Number of spaces used for indentation.\n */\n indentSize?: number;\n };\n\nexport enum Urgency {\n Default,\n Important,\n Urgent,\n}\n\nexport type Mention = {\n /**\n * mention position\n */\n pos: number;\n /**\n * id of the mentioned user\n */\n uid: string;\n /**\n * length of the mention\n */\n len: number;\n};\n\nexport type MessageContent = {\n /**\n * Text content of the message\n */\n msg: string;\n /**\n * Text styles\n */\n styles?: Style[];\n /**\n * Urgency of the message\n */\n urgency?: Urgency;\n /**\n * Quoted message (optional)\n */\n quote?: SendMessageQuote;\n /**\n * Mentions in the message (optional)\n */\n mentions?: Mention[];\n /**\n * Attachments in the message (optional)\n */\n attachments?: AttachmentSource | AttachmentSource[];\n /**\n * Time to live in milliseconds\n */\n ttl?: number;\n};\n\nexport const sendMessageFactory = apiFactory()((api, ctx, utils) => {\n const serviceURLs = {\n message: {\n [ThreadType.User]: utils.makeURL(`${api.zpwServiceMap.chat[0]}/api/message`, {\n nretry: 0,\n }),\n [ThreadType.Group]: utils.makeURL(`${api.zpwServiceMap.group[0]}/api/group`, {\n nretry: 0,\n }),\n },\n attachment: {\n [ThreadType.User]: `${api.zpwServiceMap.file[0]}/api/message/`,\n [ThreadType.Group]: `${api.zpwServiceMap.file[0]}/api/group/`,\n },\n };\n\n const { sharefile } = ctx.settings!.features;\n\n function isExceedMaxFile(totalFile: number) {\n return totalFile > sharefile.max_file;\n }\n\n function isExceedMaxFileSize(fileSize: number) {\n return fileSize > sharefile.max_size_share_file_v3 * 1024 * 1024;\n }\n\n function getGroupLayoutId() {\n return Date.now();\n }\n\n async function send(data: SendType | SendType[]): Promise<SendMessageResult[]> {\n const dataArray = castArray(data);\n\n const requests: Promise<SendMessageResult>[] = [];\n\n for (const each of dataArray) {\n requests.push(\n (async () => {\n const response = await utils.request(each.url, {\n method: \"POST\",\n body: each.body,\n headers: each.headers,\n });\n\n return await resolveResponse<SendMessageResult>(ctx, response);\n })(),\n );\n }\n\n return await Promise.all(requests);\n }\n\n async function upthumb(source: AttachmentSource, url: string): Promise<UpthumbType> {\n const formData = new FormData();\n const buffer = typeof source == \"string\" ? await fs.readFile(source) : source.data;\n formData.append(\"fileContent\", buffer, {\n filename: \"blob\",\n contentType: \"image/png\",\n });\n\n const params = {\n clientId: Date.now(),\n imei: ctx.imei,\n };\n\n const encryptedParams = utils.encodeAES(JSON.stringify(params));\n if (!encryptedParams) throw new ZaloApiError(\"Failed to encrypt message\");\n\n const response = await utils.request(\n utils.makeURL(url + \"upthumb?\", {\n params: encryptedParams,\n }),\n {\n method: \"POST\",\n headers: formData.getHeaders(),\n body: formData.getBuffer() as BodyInit,\n },\n );\n\n return await resolveResponse<UpthumbType>(ctx, response);\n }\n\n function handleMentions(type: ThreadType, msg: string, mentions?: Mention[]) {\n let totalMentionLen = 0;\n const mentionsFinal =\n !isEmpty(mentions) && type == ThreadType.Group\n ? castArray(mentions)\n .filter((m) => m.pos >= 0 && m.uid && m.len > 0)\n .map((m) => {\n totalMentionLen += m.len;\n return {\n pos: m.pos,\n uid: m.uid,\n len: m.len,\n type: m.uid == \"-1\" ? 1 : 0,\n };\n })\n : [];\n\n if (totalMentionLen > msg.length) {\n throw new ZaloApiError(\"Invalid mentions: total mention characters exceed message length\");\n }\n\n return {\n mentionsFinal,\n msgFinal: msg,\n };\n }\n\n function handleStyles(params: Record<string, unknown>, styles?: Style[]) {\n if (styles)\n assign(params, {\n textProperties: JSON.stringify({\n styles: styles.map((e) => {\n const styleFinal = {\n ...e,\n indentSize: undefined,\n st:\n e.st == TextStyle.Indent\n ? TextStyle.Indent.replace(/\\$/g, `${e.indentSize ?? 1}0`)\n : e.st,\n };\n\n removeUndefinedKeys(styleFinal);\n return styleFinal;\n }),\n ver: 0,\n }),\n });\n }\n\n function handleUrgency(params: Record<string, unknown>, urgency?: Urgency) {\n if (urgency == Urgency.Important || urgency == Urgency.Urgent) {\n assign(params, { metaData: { urgency } });\n }\n }\n\n async function handleMessage(\n { msg, styles, urgency, mentions, quote, ttl }: MessageContent,\n threadId: string,\n type: ThreadType,\n ) {\n if (!msg || msg.length == 0) throw new ZaloApiError(\"Missing message content\");\n const isGroupMessage = type == ThreadType.Group;\n\n const { mentionsFinal, msgFinal } = handleMentions(type, msg, mentions);\n msg = msgFinal;\n\n if (quote) {\n if (typeof quote.content != \"string\" && quote.msgType == \"webchat\") {\n throw new ZaloApiError(\"This kind of `webchat` quote type is not available\");\n }\n\n if (quote.msgType == \"group.poll\") {\n throw new ZaloApiError(\"The `group.poll` quote type is not available\");\n }\n }\n\n const isMentionsValid = mentionsFinal.length > 0 && isGroupMessage;\n const params = quote\n ? {\n toid: isGroupMessage ? undefined : threadId,\n grid: isGroupMessage ? threadId : undefined,\n message: msg,\n clientId: Date.now(),\n mentionInfo: isMentionsValid ? JSON.stringify(mentionsFinal) : undefined,\n qmsgOwner: quote.uidFrom,\n qmsgId: quote.msgId,\n qmsgCliId: quote.cliMsgId,\n qmsgType: getClientMessageType(quote.msgType),\n qmsgTs: quote.ts,\n qmsg: typeof quote.content == \"string\" ? quote.content : prepareQMSG(quote),\n imei: isGroupMessage ? undefined : ctx.imei,\n visibility: isGroupMessage ? 0 : undefined,\n qmsgAttach: isGroupMessage ? JSON.stringify(prepareQMSGAttach(quote)) : undefined,\n qmsgTTL: quote.ttl,\n ttl: ttl ?? 0,\n }\n : {\n message: msg,\n clientId: Date.now(),\n mentionInfo: isMentionsValid ? JSON.stringify(mentionsFinal) : undefined,\n imei: isGroupMessage ? undefined : ctx.imei,\n ttl: ttl ?? 0,\n visibility: isGroupMessage ? 0 : undefined,\n toid: isGroupMessage ? undefined : threadId,\n grid: isGroupMessage ? threadId : undefined,\n };\n\n handleStyles(params, styles);\n handleUrgency(params, urgency);\n\n removeUndefinedKeys(params);\n\n const encryptedParams = utils.encodeAES(JSON.stringify(params));\n if (!encryptedParams) throw new ZaloApiError(\"Failed to encrypt message\");\n const finalServiceUrl = new URL(serviceURLs.message[type]);\n if (quote) {\n finalServiceUrl.pathname = finalServiceUrl.pathname + \"/quote\";\n } else {\n finalServiceUrl.pathname =\n finalServiceUrl.pathname +\n \"/\" +\n (isGroupMessage ? (params.mentionInfo ? \"mention\" : \"sendmsg\") : \"sms\");\n }\n\n return {\n url: finalServiceUrl.toString(),\n body: new URLSearchParams({ params: encryptedParams }),\n };\n }\n\n async function handleAttachment(\n { msg, attachments, mentions, quote, ttl, urgency }: MessageContent,\n threadId: string,\n type: ThreadType,\n ) {\n if (!attachments) throw new ZaloApiError(\"Missing attachments\");\n const attachmentsArray = castArray(attachments);\n if (attachmentsArray.length == 0) throw new ZaloApiError(\"Missing attachments\");\n const firstSource = attachmentsArray[0];\n const isFilePath = typeof firstSource == \"string\";\n\n const firstExtFile = getFileExtension(isFilePath ? firstSource : firstSource.filename);\n const isSingleFile = attachmentsArray.length == 1;\n const isGroupMessage = type == ThreadType.Group;\n\n const canBeDesc = isSingleFile && [\"jpg\", \"jpeg\", \"png\", \"webp\"].includes(firstExtFile);\n\n const gifFiles = attachmentsArray.filter((e) => getFileExtension(typeof e == \"string\" ? e : e.filename) == \"gif\");\n const nonGifAttachments = attachmentsArray.filter((e) => getFileExtension(typeof e == \"string\" ? e : e.filename) != \"gif\");\n\n const uploadAttachment = nonGifAttachments.length == 0 ? [] : await api.uploadAttachment(nonGifAttachments, threadId, type);\n\n const attachmentsData: AttachmentData[] = [];\n let indexInGroupLayout = uploadAttachment.length - 1;\n\n const groupLayoutId = getGroupLayoutId();\n\n const { mentionsFinal, msgFinal } = handleMentions(type, msg, mentions);\n msg = msgFinal;\n\n const isMentionsValid = mentionsFinal.length > 0 && isGroupMessage && nonGifAttachments.length == 1;\n\n const isMultiFile = nonGifAttachments.length > 1;\n let clientId = Date.now();\n for (const attachment of uploadAttachment) {\n let data: AttachmentData;\n switch (attachment.fileType) {\n case \"image\": {\n data = {\n fileType: attachment.fileType,\n params: {\n photoId: attachment.photoId,\n clientId: (clientId++).toString(),\n desc: msg,\n width: attachment.width,\n height: attachment.height,\n toid: isGroupMessage ? undefined : String(threadId),\n grid: isGroupMessage ? String(threadId) : undefined,\n rawUrl: attachment.normalUrl,\n hdUrl: attachment.hdUrl,\n thumbUrl: attachment.thumbUrl,\n oriUrl: isGroupMessage ? attachment.normalUrl : undefined,\n normalUrl: isGroupMessage ? undefined : attachment.normalUrl,\n hdSize: String(attachment.totalSize),\n zsource: -1,\n ttl: ttl ?? 0,\n jcp: '{\"convertible\":\"jxl\"}',\n\n groupLayoutId: isMultiFile ? groupLayoutId : undefined,\n isGroupLayout: isMultiFile ? 1 : undefined,\n idInGroup: isMultiFile ? indexInGroupLayout-- : undefined,\n totalItemInGroup: isMultiFile ? uploadAttachment.length : undefined,\n\n mentionInfo:\n isMentionsValid && canBeDesc && !quote ? JSON.stringify(mentionsFinal) : undefined,\n },\n body: new URLSearchParams(),\n };\n break;\n }\n\n case \"video\": {\n data = {\n fileType: attachment.fileType,\n params: {\n fileId: attachment.fileId,\n checksum: attachment.checksum,\n checksumSha: \"\",\n extention: getFileExtension(attachment.fileName),\n totalSize: attachment.totalSize,\n fileName: attachment.fileName,\n clientId: attachment.clientFileId,\n fType: 1,\n fileCount: 0,\n fdata: \"{}\",\n toid: isGroupMessage ? undefined : String(threadId),\n grid: isGroupMessage ? String(threadId) : undefined,\n fileUrl: attachment.fileUrl,\n zsource: -1,\n ttl: ttl ?? 0,\n },\n body: new URLSearchParams(),\n };\n break;\n }\n\n case \"others\": {\n data = {\n fileType: attachment.fileType,\n params: {\n fileId: attachment.fileId,\n checksum: attachment.checksum,\n checksumSha: \"\",\n extention: getFileExtension(attachment.fileName),\n totalSize: attachment.totalSize,\n fileName: attachment.fileName,\n clientId: attachment.clientFileId,\n fType: 1,\n fileCount: 0,\n fdata: \"{}\",\n toid: isGroupMessage ? undefined : String(threadId),\n grid: isGroupMessage ? String(threadId) : undefined,\n fileUrl: attachment.fileUrl,\n zsource: -1,\n ttl: ttl ?? 0,\n },\n body: new URLSearchParams(),\n };\n break;\n }\n }\n\n handleUrgency(data.params, urgency);\n\n removeUndefinedKeys(data.params);\n const encryptedParams = utils.encodeAES(JSON.stringify(data.params));\n if (!encryptedParams) throw new ZaloApiError(\"Failed to encrypt message\");\n\n data.body.append(\"params\", encryptedParams);\n attachmentsData.push(data);\n }\n\n for (const gif of gifFiles) {\n const isFilePath = typeof gif == \"string\";\n const gifData = isFilePath ? await getGifMetaData(ctx, gif) : { ...gif.metadata, fileName: gif.filename };\n if (isExceedMaxFileSize(gifData.totalSize!))\n throw new ZaloApiError(\n `File ${isFilePath ? getFileName(gif) : gif.filename} size exceed maximum size of ${sharefile.max_size_share_file_v3}MB`,\n );\n\n const _upthumb = await upthumb(gif, serviceURLs.attachment[ThreadType.User]);\n\n const formData = new FormData();\n formData.append(\"chunkContent\", isFilePath ? await fs.readFile(gif) : gif.data, {\n filename: isFilePath ? getFileName(gif) : gif.filename,\n contentType: \"application/octet-stream\",\n });\n\n const params = {\n clientId: Date.now().toString(),\n fileName: gifData.fileName,\n totalSize: gifData.totalSize,\n width: gifData.width,\n height: gifData.height,\n msg: msg,\n type: 1,\n ttl: ttl ?? 0,\n visibility: isGroupMessage ? 0 : undefined,\n toid: isGroupMessage ? undefined : threadId,\n grid: isGroupMessage ? threadId : undefined,\n thumb: _upthumb.url,\n checksum: (await getMd5LargeFileObject(gif, gifData.totalSize!)).data,\n totalChunk: 1,\n chunkId: 1,\n };\n\n handleUrgency(params, urgency);\n\n removeUndefinedKeys(params);\n const encryptedParams = utils.encodeAES(JSON.stringify(params));\n if (!encryptedParams) throw new ZaloApiError(\"Failed to encrypt message\");\n\n attachmentsData.push({\n query: {\n params: encryptedParams,\n type: \"1\",\n },\n body: formData.getBuffer(),\n headers: formData.getHeaders(),\n fileType: \"gif\",\n });\n }\n\n const responses = [];\n\n for (const data of attachmentsData) {\n responses.push({\n url: utils.makeURL(\n serviceURLs.attachment[type] + attachmentUrlType[data.fileType],\n assign(\n {\n nretry: \"0\",\n },\n data.query || {},\n ),\n ),\n body: data.body as BodyInit,\n headers: data.fileType == \"gif\" ? data.headers : {},\n });\n }\n\n return responses;\n }\n\n /**\n * Send a message to a thread\n *\n * @param message Message content\n * @param threadId group or user id\n * @param type Message type (User or Group)\n * @param quote Message or GroupMessage instance (optional), used for quoting\n *\n * @throws {ZaloApiError | ZaloApiMissingImageMetadataGetter}\n */\n return async function sendMessage(\n message: MessageContent | string,\n threadId: string,\n type: ThreadType = ThreadType.User,\n ) {\n if (!message) throw new ZaloApiError(\"Missing message content\");\n if (!threadId) throw new ZaloApiError(\"Missing threadId\");\n if (typeof message == \"string\") message = { msg: message };\n\n let { msg, mentions } = message;\n const { attachments } = message;\n const { quote, ttl, styles, urgency } = message;\n\n const attachmentsArray = attachments ? castArray(attachments) : [];\n\n if (!msg && attachmentsArray.length == 0)\n throw new ZaloApiError(\"Missing message content\");\n\n if (attachmentsArray.length > 0 && isExceedMaxFile(attachmentsArray.length))\n throw new ZaloApiError(\"Exceed maximum file of \" + sharefile.max_file);\n\n const responses: {\n message: SendMessageResult | null;\n attachment: SendMessageResult[];\n } = {\n message: null,\n attachment: [],\n };\n\n if (attachmentsArray.length > 0) {\n const firstExtFile = getFileExtension(\n typeof attachmentsArray[0] == \"string\" ? attachmentsArray[0] : attachmentsArray[0].filename,\n );\n const isSingleFile = attachmentsArray.length == 1;\n\n const canBeDesc = isSingleFile && [\"jpg\", \"jpeg\", \"png\", \"webp\"].includes(firstExtFile);\n if ((!canBeDesc && msg.length > 0) || (msg.length > 0 && quote)) {\n // send message and attachment separately\n await handleMessage(message, threadId, type).then(async (data) => {\n responses.message = (await send(data))[0];\n });\n msg = \"\";\n mentions = undefined;\n }\n const handledData = await handleAttachment(\n { msg, mentions, attachments, quote, ttl, styles, urgency },\n threadId,\n type,\n );\n responses.attachment = await send(handledData);\n msg = \"\";\n }\n\n if (msg.length > 0) {\n const handledData = await handleMessage(message, threadId, type);\n responses.message = (await send(handledData))[0];\n }\n\n return responses;\n };\n});\n","import { ZaloApiError } from \"../Errors/ZaloApiError\";\nimport { ThreadType } from \"../models/index\";\nimport { apiFactory, removeUndefinedKeys } from \"../utils\";\n\nexport enum ReportReason {\n Sensitive = 1,\n Annoy = 2,\n Fraud = 3,\n Other = 0,\n}\n\nexport type SendReportOptions =\n | {\n reason: ReportReason.Other;\n content: string;\n }\n | {\n reason: Exclude<ReportReason, ReportReason.Other>;\n };\n\nexport type SendReportResponse = {\n reportId: string;\n};\n\nexport const sendReportFactory = apiFactory<SendReportResponse>()((api, ctx, utils) => {\n const serviceURL = {\n [ThreadType.User]: utils.makeURL(`${api.zpwServiceMap.profile[0]}/api/report/abuse-v2`),\n [ThreadType.Group]: utils.makeURL(`${api.zpwServiceMap.profile[0]}/api/social/profile/reportabuse`),\n };\n\n /**\n * Send report to Zalo\n *\n * @param options Report options\n * @param threadId The threadID to report\n * @param type Thread type, default direct\n *\n * @throws {ZaloApiError}\n *\n */\n return async function sendReport(options: SendReportOptions, threadId: string, type: ThreadType = ThreadType.User) {\n const params =\n type == ThreadType.User\n ? {\n idTo: threadId,\n objId: \"person.profile\",\n reason: options.reason.toString(),\n content: options.reason == ReportReason.Other ? options.content : undefined,\n }\n : {\n uidTo: threadId,\n type: 14,\n reason: options.reason,\n content: options.reason == ReportReason.Other ? options.content : \"\",\n imei: ctx.imei,\n };\n\n removeUndefinedKeys(params);\n\n const encryptedParams = utils.encodeAES(JSON.stringify(params));\n if (!encryptedParams) throw new ZaloApiError(\"Failed to encrypt params\");\n\n const response = await utils.request(serviceURL[type], {\n method: \"POST\",\n body: new URLSearchParams({\n params: encryptedParams,\n }),\n });\n\n return utils.resolve(response);\n };\n});\n","import { ZaloApiError } from \"../Errors/ZaloApiError\";\nimport castArray from \"lodash/castArray\";\n\nimport { MAX_MESSAGES_PER_SEND } from \"../context\";\nimport { ThreadType } from \"../models/index\";\nimport { apiFactory } from \"../utils\";\n\nexport type SendSeenEventResponse = {\n status: number;\n};\n\nexport type SendSeenEventMessageParams = {\n msgId: string;\n cliMsgId: string;\n uidFrom: string;\n idTo: string;\n msgType: string;\n st: number;\n at: number;\n cmd: number;\n ts: string | number;\n};\n\ntype RequestMessageParams = {\n gmi: string;\n cmi: string;\n si: string;\n di: string;\n mt: string;\n st: number;\n at: number;\n cmd: number;\n ts: number;\n};\n\ntype MsgInfos = {\n data: RequestMessageParams[];\n grid?: string;\n senderId?: string;\n};\n\nexport const sendSeenEventFactory = apiFactory<SendSeenEventResponse>()((api, ctx, utils) => {\n const serviceURL = {\n [ThreadType.User]: utils.makeURL(`${api.zpwServiceMap.chat[0]}/api/message/seenv2`, {\n nretry: 0,\n }),\n [ThreadType.Group]: utils.makeURL(`${api.zpwServiceMap.group[0]}/api/group/seenv2`, {\n nretry: 0,\n }),\n };\n\n /**\n * Send message seen event\n *\n * @param messages List of messages to send seen event\n * @param type Messages type (User or Group), defaults to User\n *\n * @throws {ZaloApiError}\n */\n return async function sendSeenEvent(\n messages: SendSeenEventMessageParams | SendSeenEventMessageParams[],\n type: ThreadType = ThreadType.User,\n ) {\n if (!messages) throw new ZaloApiError(\"messages are missing or not in a valid array format.\");\n const messagesArray = castArray(messages);\n if (messagesArray.length === 0 || messagesArray.length > MAX_MESSAGES_PER_SEND)\n throw new ZaloApiError(\"messages must contain between 1 and 50 messages.\");\n\n const isGroup = type === ThreadType.Group;\n const threadId = isGroup ? messagesArray[0].idTo : messagesArray[0].uidFrom;\n\n const msgInfos: MsgInfos = {\n data: messagesArray.map((msg) => {\n const curThreadId = isGroup ? msg.idTo : msg.uidFrom;\n if (curThreadId !== threadId) {\n throw new ZaloApiError(\"All messages must belong to the same thread.\");\n }\n return {\n cmi: msg.cliMsgId,\n gmi: msg.msgId,\n si: msg.uidFrom,\n di: msg.idTo === ctx.uid ? \"0\" : msg.idTo,\n mt: msg.msgType,\n st: msg.st || 0 === msg.st ? 0 : -1,\n at: msg.at || 0 === msg.at ? 0 : -1,\n cmd: msg.cmd || 0 === msg.cmd ? 0 : -1,\n ts: parseInt(`${msg.ts}`) || 0 === parseInt(`${msg.ts}`) ? 0 : -1,\n };\n }),\n [isGroup ? \"grid\" : \"senderId\"]: threadId,\n };\n\n const params = {\n msgInfos: JSON.stringify(msgInfos),\n ...(isGroup ? { imei: ctx.imei } : {}),\n };\n\n const encryptedParams = utils.encodeAES(JSON.stringify(params));\n if (!encryptedParams) throw new ZaloApiError(\"Failed to encrypt params\");\n\n const response = await utils.request(serviceURL[type], {\n method: \"POST\",\n body: new URLSearchParams({\n params: encryptedParams,\n }),\n });\n\n return utils.resolve(response);\n };\n});\n","import { ZaloApiError } from \"../Errors/ZaloApiError\";\nimport { ThreadType } from \"../models/index\";\nimport { apiFactory, removeUndefinedKeys } from \"../utils\";\n\nexport type SendStickerPayload = {\n id: number;\n cateId: number;\n type: number;\n}\n\nexport type SendStickerResponse = {\n msgId: number;\n};\n\nexport const sendStickerFactory = apiFactory<SendStickerResponse>()((api, ctx, utils) => {\n const serviceURL = {\n [ThreadType.User]: utils.makeURL(`${api.zpwServiceMap.chat[0]}/api/message/sticker`, {\n nretry: \"0\",\n }),\n [ThreadType.Group]: utils.makeURL(`${api.zpwServiceMap.group[0]}/api/group/sticker`, {\n nretry: \"0\",\n }),\n };\n\n /**\n * Send a sticker to a thread\n *\n * @param sticker Sticker object\n * @param threadId group or user id\n * @param type Message type (User or GroupMessage)\n *\n * @throws {ZaloApiError}\n */\n return async function sendSticker(sticker: SendStickerPayload, threadId: string, type: ThreadType = ThreadType.User) {\n if (!sticker) throw new ZaloApiError(\"Missing sticker\");\n if (!threadId) throw new ZaloApiError(\"Missing threadId\");\n\n if (!sticker.id) throw new ZaloApiError(\"Missing sticker id\");\n if (!sticker.cateId) throw new ZaloApiError(\"Missing sticker cateId\");\n if (!sticker.type) throw new ZaloApiError(\"Missing sticker type\");\n\n const isGroupMessage = type === ThreadType.Group;\n\n const params = {\n stickerId: sticker.id,\n cateId: sticker.cateId,\n type: sticker.type,\n clientId: Date.now(),\n imei: ctx.imei,\n zsource: 101,\n toid: isGroupMessage ? undefined : threadId,\n grid: isGroupMessage ? threadId : undefined,\n };\n\n removeUndefinedKeys(params);\n\n const encryptedParams = utils.encodeAES(JSON.stringify(params));\n if (!encryptedParams) throw new ZaloApiError(\"Failed to encrypt message\");\n\n const response = await utils.request(serviceURL[type], {\n method: \"POST\",\n body: new URLSearchParams({\n params: encryptedParams,\n }),\n });\n\n return utils.resolve(response);\n };\n});\n","import { ZaloApiError } from \"../Errors/ZaloApiError\";\nimport { DestType, ThreadType } from \"../models/index\";\nimport { apiFactory } from \"../utils\";\n\nexport type SendTypingEventResponse = {\n status: number;\n};\n\nexport const sendTypingEventFactory = apiFactory<SendTypingEventResponse>()((api, ctx, utils) => {\n const serviceURL = {\n [ThreadType.User]: utils.makeURL(`${api.zpwServiceMap.chat[0]}/api/message/typing`),\n [ThreadType.Group]: utils.makeURL(`${api.zpwServiceMap.group[0]}/api/group/typing`),\n };\n\n /**\n * Send typing event\n *\n * @param threadId The ID of the User or Group to send the typing event to\n * @param type The type of thread (User or Group)\n * @param destType The destination type (User or Page), for User threads only, defaults to User\n *\n * @throws {ZaloApiError}\n */\n return async function sendTypingEvent(\n threadId: string,\n type: ThreadType = ThreadType.User,\n destType: DestType = DestType.User,\n ) {\n if (!threadId) throw new ZaloApiError(\"Missing threadId\");\n\n const params = {\n [type === ThreadType.User ? \"toid\" : \"grid\"]: threadId,\n ...(type === ThreadType.User ? { destType } : {}),\n imei: ctx.imei,\n };\n\n const encryptedParams = utils.encodeAES(JSON.stringify(params));\n if (!encryptedParams) throw new ZaloApiError(\"Failed to encrypt params\");\n\n const response = await utils.request(serviceURL[type], {\n method: \"POST\",\n body: new URLSearchParams({\n params: encryptedParams,\n }),\n });\n\n return utils.resolve(response);\n };\n});\n","import { ZaloApiError } from \"../Errors/ZaloApiError\";\nimport { ThreadType } from \"../models/index\";\nimport { apiFactory } from \"../utils\";\n\nexport type SendVideoOptions = {\n /**\n * Optional message to send along with the video\n */\n msg?: string;\n /**\n * URL of the video\n */\n videoUrl: string;\n /**\n * URL of the thumbnail\n */\n thumbnailUrl: string;\n /**\n * Video duration in milliseconds || Eg: video duration: 5.5s => 5.5 * 1000 = 5500\n */\n duration?: number;\n /**\n * Width of the video\n */\n width?: number;\n /**\n * Height of the video\n */\n height?: number;\n /**\n * Time to live in milliseconds (default: 0)\n */\n ttl?: number;\n};\n\nexport type SendVideoResponse = {\n msgId: number;\n};\n\nexport const sendVideoFactory = apiFactory<SendVideoResponse>()((api, ctx, utils) => {\n const serviceURL = {\n [ThreadType.User]: utils.makeURL(`${api.zpwServiceMap.file[0]}/api/message/forward`),\n [ThreadType.Group]: utils.makeURL(`${api.zpwServiceMap.file[0]}/api/group/forward`),\n };\n\n /**\n * Send a video to a User - Group\n *\n * @param options send video options\n * @param threadId ID of the user or group to send the video to\n * @param type Type of thread (USER or GROUP)\n *\n * @throws {ZaloApiError}\n *\n * @examples Example Video Resolutions:\n * - **Standard Videos**:\n * - 3840x2160 (4K UHD): Width 3840px, Height 2160px.\n * - 1920x1080 (Full HD): Width 1920px, Height 1080px.\n * - 1280x720 (HD): Width 1280px, Height 720px.\n * - **Document-Oriented Videos** (Portrait):\n * - 3840x2160 (4K UHD): Width 3840px, Height 2160px.\n * - 720x1280 (HD): Width 720px, Height 1280px.\n * - 1440x2560 (2K): Width 1440px, Height 2560px.\n *\n */\n return async function sendVideo(options: SendVideoOptions, threadId: string, type: ThreadType = ThreadType.User) {\n let fileSize: number = 0;\n const clientId = Date.now();\n\n try {\n const headResponse = await utils.request(options.videoUrl, { method: \"HEAD\" }, true);\n if (headResponse.ok) {\n fileSize = parseInt(headResponse.headers.get(\"content-length\") || \"0\");\n }\n } catch (error: unknown) {\n throw new ZaloApiError(\n `Unable to get video content: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n\n const params =\n type === ThreadType.User\n ? {\n toId: threadId,\n clientId: String(clientId),\n ttl: options.ttl ?? 0,\n zsource: 704,\n msgType: 5,\n msgInfo: JSON.stringify({\n videoUrl: options.videoUrl,\n thumbUrl: options.thumbnailUrl,\n duration: options.duration ?? 0,\n width: options.width ?? 1280,\n height: options.height ?? 720,\n fileSize: fileSize,\n properties: {\n color: -1,\n size: -1,\n type: 1003,\n subType: 0,\n ext: {\n sSrcType: -1,\n sSrcStr: \"\",\n msg_warning_type: 0,\n },\n },\n title: options.msg ?? \"\",\n }),\n imei: ctx.imei,\n }\n : {\n grid: threadId,\n visibility: 0,\n clientId: String(clientId),\n ttl: options.ttl ?? 0,\n zsource: 704,\n msgType: 5,\n msgInfo: JSON.stringify({\n videoUrl: options.videoUrl,\n thumbUrl: options.thumbnailUrl,\n duration: options.duration ?? 0,\n width: options.width ?? 1280,\n height: options.height ?? 720,\n fileSize: fileSize,\n properties: {\n color: -1,\n size: -1,\n type: 1003,\n subType: 0,\n ext: {\n sSrcType: -1,\n sSrcStr: \"\",\n msg_warning_type: 0,\n },\n },\n title: options.msg ?? \"\",\n }),\n imei: ctx.imei,\n };\n\n // @TODO: later\n // if (typeof message !== \"string\" && message.mention) {\n // params.mentionInfo = message.mention;\n // }\n if (type !== ThreadType.User && type !== ThreadType.Group) {\n throw new ZaloApiError(\"Thread type is invalid\");\n }\n\n const encryptedParams = utils.encodeAES(JSON.stringify(params));\n if (!encryptedParams) throw new ZaloApiError(\"Failed to encrypt params\");\n\n const response = await utils.request(serviceURL[type], {\n method: \"POST\",\n body: new URLSearchParams({\n params: encryptedParams,\n }),\n });\n\n return utils.resolve(response);\n };\n});\n","import { ZaloApiError } from \"../Errors/ZaloApiError\";\nimport { ThreadType } from \"../models/index\";\nimport { apiFactory } from \"../utils\";\n\nexport type SendVoiceOptions = {\n voiceUrl: string;\n /**\n * Time to live in milliseconds (default: 0)\n */\n ttl?: number;\n};\n\nexport type SendVoiceResponse = {\n msgId: string;\n};\n\nexport const sendVoiceFactory = apiFactory<SendVoiceResponse>()((api, ctx, utils) => {\n const serviceURL = {\n [ThreadType.User]: utils.makeURL(`${api.zpwServiceMap.file[0]}/api/message/forward`),\n [ThreadType.Group]: utils.makeURL(`${api.zpwServiceMap.file[0]}/api/group/forward`),\n };\n\n /**\n * Send a voice to a User - Group\n *\n * @param options voice options\n * @param threadId ID of the user or group to send the voice to\n * @param type Type of thread, default user\n *\n * @throws {ZaloApiError}\n */\n return async function sendVoice(options: SendVoiceOptions, threadId: string, type: ThreadType = ThreadType.User) {\n let fileSize = null;\n const clientId = Date.now().toString();\n\n try {\n const headResponse = await utils.request(options.voiceUrl, { method: \"HEAD\" }, true);\n if (headResponse.ok) {\n fileSize = parseInt(headResponse.headers.get(\"content-length\") || \"0\");\n }\n } catch (error: unknown) {\n throw new ZaloApiError(\n `Unable to get voice content: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n\n const params =\n type === ThreadType.User\n ? {\n toId: threadId,\n ttl: options.ttl ?? 0,\n zsource: -1,\n msgType: 3,\n clientId: clientId,\n msgInfo: JSON.stringify({\n voiceUrl: options.voiceUrl,\n m4aUrl: options.voiceUrl,\n fileSize: fileSize ?? 0,\n }),\n imei: ctx.imei,\n }\n : {\n grid: threadId,\n visibility: 0,\n ttl: options.ttl ?? 0,\n zsource: -1,\n msgType: 3,\n clientId: clientId,\n msgInfo: JSON.stringify({\n voiceUrl: options.voiceUrl,\n m4aUrl: options.voiceUrl,\n fileSize: fileSize ?? 0,\n }),\n imei: ctx.imei,\n };\n\n if (type !== ThreadType.User && type !== ThreadType.Group) {\n throw new ZaloApiError(\"Thread type is invalid\");\n }\n\n const encryptedParams = utils.encodeAES(JSON.stringify(params));\n if (!encryptedParams) throw new ZaloApiError(\"Failed to encrypt params\");\n\n const response = await utils.request(serviceURL[type], {\n method: \"POST\",\n body: new URLSearchParams({\n params: encryptedParams,\n }),\n });\n\n return utils.resolve(response);\n };\n});\n","import { ZaloApiError } from \"../Errors/ZaloApiError\";\nimport castArray from \"lodash/castArray\";\n\nimport { ThreadType } from \"../models/index\";\nimport { apiFactory } from \"../utils\";\n\nexport type SetHiddenConversationsResponse = \"\";\n\nexport const setHiddenConversationsFactory = apiFactory<SetHiddenConversationsResponse>()((api, ctx, utils) => {\n const serviceURL = utils.makeURL(`${api.zpwServiceMap.conversation[0]}/api/hiddenconvers/add-remove`);\n\n /**\n * Set hidden conversations\n *\n * @param hidden - Hide or unhide conversations\n * @param threadId Thread ID(s)\n * @param type Thread type (User/Group)\n *\n * @throws {ZaloApiError}\n */\n return async function setHiddenConversations(\n hidden: boolean,\n threadId: string | string[],\n type: ThreadType = ThreadType.User,\n ) {\n const threadIds = castArray(threadId);\n if (threadIds.length === 0) throw new ZaloApiError(\"threadId is required\");\n \n const is_group = type === ThreadType.Group ? 1 : 0;\n const params = {\n [hidden ? \"add_threads\" : \"del_threads\"]: JSON.stringify(\n threadIds.map((id) => ({\n thread_id: id,\n is_group: is_group,\n })),\n ),\n [hidden ? \"del_threads\" : \"add_threads\"]: \"[]\",\n imei: ctx.imei,\n };\n\n const encryptedParams = utils.encodeAES(JSON.stringify(params));\n if (!encryptedParams) throw new ZaloApiError(\"Failed to encrypt params\");\n\n const response = await utils.request(serviceURL, {\n method: \"POST\",\n body: new URLSearchParams({\n params: encryptedParams,\n }),\n });\n\n return utils.resolve(response);\n };\n});\n","import { ZaloApiError } from \"../Errors/ZaloApiError\";\nimport { ThreadType } from \"../models/index\";\nimport { apiFactory } from \"../utils\";\n\nexport type SetMuteParams = {\n /**\n * Mute duration in seconds or predefined durations\n */\n duration?: MuteDuration | number;\n action?: MuteAction;\n};\n\nexport type SetMuteResponse = \"\";\n\nexport enum MuteDuration {\n ONE_HOUR = 3600,\n FOUR_HOURS = 14400,\n FOREVER = -1,\n UNTIL_8AM = \"until8AM\",\n}\n\nexport enum MuteAction {\n MUTE = 1,\n UNMUTE = 3, // khi tat thi duration = -1\n}\n\nexport const setMuteFactory = apiFactory<SetMuteResponse>()((api, ctx, utils) => {\n const serviceURL = utils.makeURL(`${api.zpwServiceMap.profile[0]}/api/social/profile/setmute`);\n\n /**\n * Set mute\n *\n * @param params - Mute parameters\n * @param threadID - ID of the thread to mute\n * @param type - Type of thread (User or Group)\n *\n * @throws {ZaloApiError}\n */\n return async function setMute(params: SetMuteParams = {}, threadID: string, type: ThreadType = ThreadType.User) {\n const { duration = MuteDuration.FOREVER, action = MuteAction.MUTE } = params;\n let muteDuration: number;\n\n if (action === MuteAction.UNMUTE) {\n muteDuration = -1;\n } else if (duration === MuteDuration.FOREVER) {\n muteDuration = -1;\n } else if (duration === MuteDuration.UNTIL_8AM) {\n const now = new Date();\n const next8AM = new Date(now);\n next8AM.setHours(8, 0, 0, 0);\n\n if (now.getHours() >= 8) {\n next8AM.setDate(next8AM.getDate() + 1);\n }\n\n muteDuration = Math.floor((next8AM.getTime() - now.getTime()) / 1000);\n } else {\n muteDuration = duration;\n }\n\n const requestParams = {\n toid: threadID,\n duration: muteDuration,\n action: action,\n startTime: Math.floor(Date.now() / 1000),\n muteType: type === ThreadType.User ? 1 : 2,\n imei: ctx.imei,\n };\n\n const encryptedParams = utils.encodeAES(JSON.stringify(requestParams));\n if (!encryptedParams) throw new ZaloApiError(\"Failed to encrypt params\");\n\n const response = await utils.request(serviceURL, {\n method: \"POST\",\n body: new URLSearchParams({\n params: encryptedParams,\n }),\n });\n\n return utils.resolve(response);\n };\n});\n","import { ZaloApiError } from \"../Errors/ZaloApiError\";\nimport castArray from \"lodash/castArray\";\nimport { ThreadType } from \"../models/index\";\nimport { apiFactory } from \"../utils\";\n\nexport type SetPinnedConversationsResponse = \"\";\n\nexport const setPinnedConversationsFactory = apiFactory<SetPinnedConversationsResponse>()((api, _, utils) => {\n const serviceURL = utils.makeURL(`${api.zpwServiceMap.conversation[0]}/api/pinconvers/updatev2`);\n\n /**\n * Pin and unpin conversations of threads)\n *\n * @param pinned Should pin conversations\n * @param threadId The ID(s) of the thread\n * @param type Type of thread, default User\n *\n * @throws {ZaloApiError}\n *\n */\n return async function setPinnedConversations(\n pinned: boolean,\n threadId: string | string[],\n type: ThreadType = ThreadType.User,\n ) {\n const threadIds = castArray(threadId);\n\n const params = {\n actionType: pinned ? 1 : 2,\n conversations: type == ThreadType.Group ? threadIds.map((id) => `g${id}`) : threadIds.map((id) => `u${id}`),\n };\n\n const encryptedParams = utils.encodeAES(JSON.stringify(params));\n if (!encryptedParams) throw new ZaloApiError(\"Failed to encrypt params\");\n\n const response = await utils.request(serviceURL, {\n method: \"POST\",\n body: new URLSearchParams({\n params: encryptedParams,\n }),\n });\n\n return utils.resolve(response);\n };\n});\n","import { ZaloApiError } from \"../Errors/ZaloApiError\";\nimport { apiFactory } from \"../utils\";\n\nexport type SharePollResponse = \"\";\n\nexport const sharePollFactory = apiFactory<SharePollResponse>()((api, ctx, utils) => {\n const serviceURL = utils.makeURL(`${api.zpwServiceMap.group[0]}/api/poll/share`);\n\n /**\n * Share a poll\n *\n * @param pollId poll id to share\n *\n * @throws {ZaloApiError}\n */\n return async function sharePoll(pollId: number) {\n const params = {\n poll_id: pollId,\n imei: ctx.imei,\n };\n\n const encryptedParams = utils.encodeAES(JSON.stringify(params));\n if (!encryptedParams) throw new ZaloApiError(\"Failed to encrypt params\");\n\n const response = await utils.request(serviceURL, {\n method: \"POST\",\n body: new URLSearchParams({\n params: encryptedParams,\n }),\n });\n\n return utils.resolve(response);\n };\n});\n","import { ZaloApiError } from \"../Errors/ZaloApiError\";\nimport { apiFactory } from \"../utils\";\n\nexport type UnBlockUserResponse = \"\";\n\nexport const unblockUserFactory = apiFactory<UnBlockUserResponse>()((api, ctx, utils) => {\n const serviceURL = utils.makeURL(`${api.zpwServiceMap.friend[0]}/api/friend/unblock`);\n\n /**\n * Unblock a User\n *\n * @param userId The ID of the User to unblock\n *\n * @throws {ZaloApiError}\n */\n return async function unblockUser(userId: string) {\n const params = {\n fid: userId,\n imei: ctx.imei,\n };\n\n const encryptedParams = utils.encodeAES(JSON.stringify(params));\n if (!encryptedParams) throw new ZaloApiError(\"Failed to encrypt params\");\n\n const response = await utils.request(serviceURL, {\n method: \"POST\",\n body: new URLSearchParams({\n params: encryptedParams,\n }),\n });\n\n return utils.resolve(response);\n };\n});\n","import { ZaloApiError } from \"../Errors/ZaloApiError\";\nimport { ThreadType } from \"../models/index\";\nimport { apiFactory } from \"../utils\";\n\nexport type UndoPayload = {\n msgId: string | number;\n cliMsgId: string | number;\n};\n\nexport type UndoResponse = {\n status: number;\n};\n\nexport const undoFactory = apiFactory<UndoResponse>()((api, ctx, utils) => {\n const URLType = {\n [ThreadType.User]: utils.makeURL(`${api.zpwServiceMap.chat[0]}/api/message/undo`),\n [ThreadType.Group]: utils.makeURL(`${api.zpwServiceMap.group[0]}/api/group/undomsg`),\n };\n /**\n * Undo a message\n *\n * @param payload Undo payload containing message ID and client message ID\n * @param threadId group or user id\n * @param type Message type (User or Group), default is User\n *\n * @throws {ZaloApiError}\n */\n return async function undo(payload: UndoPayload, threadId: string, type: ThreadType = ThreadType.User) {\n const params: Record<string, unknown> = {\n msgId: payload.msgId,\n clientId: Date.now(),\n cliMsgIdUndo: payload.cliMsgId,\n };\n\n if (type == ThreadType.Group) {\n params[\"grid\"] = threadId;\n params[\"visibility\"] = 0;\n params[\"imei\"] = ctx.imei;\n } else params[\"toid\"] = threadId;\n\n const encryptedParams = utils.encodeAES(JSON.stringify(params));\n if (!encryptedParams) throw new ZaloApiError(\"Failed to encrypt message\");\n\n const response = await utils.request(URLType[type], {\n method: \"POST\",\n body: new URLSearchParams({\n params: encryptedParams,\n }),\n });\n\n return utils.resolve(response);\n };\n});\n","import { ZaloApiError } from \"../Errors/ZaloApiError\";\nimport { apiFactory } from \"../utils\";\n\nexport type UndoFriendRequestResponse = \"\";\n\nexport const undoFriendRequestFactory = apiFactory<UndoFriendRequestResponse>()((api, _ctx, utils) => {\n const serviceURL = utils.makeURL(`${api.zpwServiceMap.friend[0]}/api/friend/undo`);\n\n /**\n * Undo send a friend request to a user.\n *\n * @param options\n *\n * @throws {ZaloApiError}\n */\n return async function undoFriendRequest(friendId: string) {\n const params = {\n fid: friendId,\n };\n\n const encryptedParams = utils.encodeAES(JSON.stringify(params));\n if (!encryptedParams) throw new ZaloApiError(\"Failed to encrypt params\");\n\n const response = await utils.request(serviceURL, {\n method: \"POST\",\n body: new URLSearchParams({\n params: encryptedParams,\n }),\n });\n\n return utils.resolve(response);\n };\n});\n","import { ZaloApiError } from \"../Errors/ZaloApiError\";\nimport { apiFactory } from \"../utils\";\n\nexport type UpdateActiveStatusResponse = {\n status: boolean;\n};\n\nexport const updateActiveStatusFactory = apiFactory<UpdateActiveStatusResponse>()((api, ctx, utils) => {\n const pingURL = utils.makeURL(`${api.zpwServiceMap.profile[0]}/api/social/profile/ping`);\n const deactiveURL = utils.makeURL(`${api.zpwServiceMap.profile[0]}/api/social/profile/deactive`);\n\n /**\n * Update active status?\n *\n * @param active \n *\n * @throws {ZaloApiError}\n */\n return async function updateActiveStatus(active: boolean) {\n const params = {\n status: active ? 1 : 0,\n imei: ctx.imei,\n };\n\n const encryptedParams = utils.encodeAES(JSON.stringify(params));\n if (!encryptedParams) throw new ZaloApiError(\"Failed to encrypt params\");\n\n const targetURL = active ? pingURL : deactiveURL;\n const response = await utils.request(utils.makeURL(targetURL, { params: encryptedParams }), {\n method: \"GET\",\n });\n\n return utils.resolve(response);\n };\n});\n","import { ZaloApiError } from \"../Errors/ZaloApiError\";\nimport { ThreadType } from \"../models/index\";\nimport { apiFactory } from \"../utils\";\n\nexport enum ChatTTL {\n NO_DELETE = 0,\n ONE_DAY = 86400000,\n SEVEN_DAYS = 604800000,\n FOURTEEN_DAYS = 1209600000,\n}\n\nexport type UpdateAutoDeleteChatResponse = \"\";\n\nexport const updateAutoDeleteChatFactory = apiFactory<UpdateAutoDeleteChatResponse>()((api, ctx, utils) => {\n const serviceURL = utils.makeURL(`${api.zpwServiceMap.conversation[0]}/api/conv/autodelete/updateConvers`);\n\n /**\n * Auto delete chat\n *\n * @param ttl The time to live of the chat\n * @param threadId The thread ID to auto delete chat\n * @param type Type of thread (User or Group)\n *\n * @throws {ZaloApiError}\n */\n return async function updateAutoDeleteChat(ttl: ChatTTL, threadId: string, type: ThreadType = ThreadType.User) {\n const params = {\n threadId: threadId,\n isGroup: type === ThreadType.Group ? 1 : 0,\n ttl: ttl,\n clientLang: ctx.language,\n };\n\n const encryptedParams = utils.encodeAES(JSON.stringify(params));\n if (!encryptedParams) throw new ZaloApiError(\"Failed to encrypt params\");\n\n const response = await utils.request(serviceURL, {\n method: \"POST\",\n body: new URLSearchParams({\n params: encryptedParams,\n }),\n });\n\n return utils.resolve(response);\n };\n});\n","import { ZaloApiError } from \"../Errors/ZaloApiError\";\nimport castArray from \"lodash/castArray\";\n\nimport { apiFactory } from \"../utils\";\n\nimport type { AutoReplyItem, AutoReplyScope } from \"../models/index\";\n\nexport type UpdateAutoReplyPayload = {\n id: number;\n content: string;\n isEnable: boolean;\n startTime: number;\n endTime: number;\n scope: AutoReplyScope;\n uids?: string | string[];\n};\n\nexport type UpdateAutoReplyResponse = {\n item: AutoReplyItem;\n version: number;\n};\n\nexport const updateAutoReplyFactory = apiFactory<UpdateAutoReplyResponse>()((api, ctx, utils) => {\n const serviceURL = utils.makeURL(`${api.zpwServiceMap.auto_reply[0]}/api/autoreply/update`);\n\n /**\n * Update auto reply\n *\n * @param payload payload\n *\n * @note this API used for zBusiness\n * @throws {ZaloApiError}\n */\n return async function updateAutoReply(payload: UpdateAutoReplyPayload) {\n const uids = castArray(payload.uids || []);\n const resultUids = payload.scope === 2 || payload.scope === 3 ? uids : [];\n\n const params = {\n cliLang: ctx.language,\n id: payload.id,\n enable: payload.isEnable,\n content: payload.content,\n startTime: payload.startTime,\n endTime: payload.endTime,\n recurrence: [\"RRULE:FREQ=DAILY;\"],\n scope: payload.scope,\n uids: resultUids,\n };\n\n const encryptedParams = utils.encodeAES(JSON.stringify(params));\n if (!encryptedParams) throw new ZaloApiError(\"Failed to encrypt params\");\n\n const response = await utils.request(serviceURL, {\n method: \"POST\",\n body: new URLSearchParams({\n params: encryptedParams,\n }),\n });\n\n return utils.resolve(response);\n };\n});\n","import { ZaloApiError } from \"../Errors/ZaloApiError\";\nimport { apiFactory } from \"../utils\";\n\nimport type { CatalogItem } from \"../models/index\";\n\nexport type UpdateCatalogPayload = {\n catalogId: string;\n catalogName: string;\n};\n\nexport type UpdateCatalogResponse = {\n item: CatalogItem;\n version_ls_catalog: number;\n version_catalog: number;\n};\n\nexport const updateCatalogFactory = apiFactory<UpdateCatalogResponse>()((api, _, utils) => {\n const serviceURL = utils.makeURL(`${api.zpwServiceMap.catalog[0]}/api/prodcatalog/catalog/update`);\n\n /**\n * Update catalog?\n *\n * @param payload payload\n *\n * @note this API is used for zBusiness\n * @throws {ZaloApiError}\n */\n return async function updateCatalog(payload: UpdateCatalogPayload) {\n const params = {\n catalog_id: payload.catalogId,\n catalog_name: payload.catalogName,\n catalog_photo: \"\", // \"\" is defaut don't upload photo\n };\n\n const encryptedParams = utils.encodeAES(JSON.stringify(params));\n if (!encryptedParams) throw new ZaloApiError(\"Failed to encrypt params\");\n\n const response = await utils.request(serviceURL, {\n method: \"POST\",\n body: new URLSearchParams({\n params: encryptedParams,\n }),\n });\n\n return utils.resolve(response);\n };\n});\n","import { ZaloApiError } from \"../Errors/ZaloApiError\";\nimport { apiFactory } from \"../utils\";\n\nexport type UpdateGroupSettingsOptions = {\n /**\n * Disallow group members to change the group name and avatar\n */\n blockName?: boolean;\n /**\n * Highlight messages from owner/admins\n */\n signAdminMsg?: boolean;\n /**\n * Don't pin messages, notes, and polls to the top of a conversation\n */\n setTopicOnly?: boolean;\n /**\n * Allow new members to read most recent messages\n */\n enableMsgHistory?: boolean;\n /**\n * Membership approval\n */\n joinAppr?: boolean;\n /**\n * Disallow group members to create notes & reminders\n */\n lockCreatePost?: boolean;\n /**\n * Disallow group members to create polls\n */\n lockCreatePoll?: boolean;\n /**\n * Disallow group members to send messages\n */\n lockSendMsg?: boolean;\n /**\n * Disallow group members to view full member list (community only)\n */\n lockViewMember?: boolean;\n\n // bannFeature?: boolean; // not see in UI, not implemented\n // addMemberOnly?: boolean; // not see in UI, not implemented\n // dirtyMedia?: boolean; // not see in UI, not implemented\n // banDuration?: boolean | number; // not see in UI, not implemented\n};\n\nexport type UpdateGroupSettingsResponse = \"\";\n\nexport const updateGroupSettingsFactory = apiFactory<UpdateGroupSettingsResponse>()((api, ctx, utils) => {\n const serviceURL = utils.makeURL(`${api.zpwServiceMap.group[0]}/api/group/setting/update`);\n\n /**\n * Update group settings\n *\n * @param options Options\n * @param groupId Group ID\n *\n * @note Zalo might throw an error with code 166 if you don't have enough permissions to change the settings.\n *\n * @throws {ZaloApiError}\n */\n return async function updateGroupSettings(options: UpdateGroupSettingsOptions, groupId: string) {\n const params = {\n blockName: options.blockName ? 1 : 0,\n signAdminMsg: options.signAdminMsg ? 1 : 0,\n\n // addMemberOnly: 0, // very tricky, any idea?\n\n setTopicOnly: options.setTopicOnly ? 1 : 0,\n enableMsgHistory: options.enableMsgHistory ? 1 : 0,\n joinAppr: options.joinAppr ? 1 : 0,\n lockCreatePost: options.lockCreatePost ? 1 : 0,\n lockCreatePoll: options.lockCreatePoll ? 1 : 0,\n lockSendMsg: options.lockSendMsg ? 1 : 0,\n lockViewMember: options.lockViewMember ? 1 : 0,\n\n // default values for not implemented options\n bannFeature: 0,\n dirtyMedia: 0,\n banDuration: 0,\n blocked_members: [],\n\n grid: groupId,\n imei: ctx.imei,\n };\n\n const encryptedParams = utils.encodeAES(JSON.stringify(params));\n if (!encryptedParams) throw new ZaloApiError(\"Failed to encrypt params\");\n\n const response = await utils.request(utils.makeURL(serviceURL, { params: encryptedParams }), {\n method: \"GET\",\n });\n\n return utils.resolve(response);\n };\n});\n","import { ZaloApiError } from \"../Errors/ZaloApiError\";\nimport { apiFactory, encryptPin } from \"../utils\";\n\nexport type UpdateHiddenConversPinResponse = \"\";\n\nexport const updateHiddenConversPinFactory = apiFactory<UpdateHiddenConversPinResponse>()((api, ctx, utils) => {\n const serviceURL = utils.makeURL(`${api.zpwServiceMap.conversation[0]}/api/hiddenconvers/update-pin`);\n const pinRegex = /^\\d{4}$/;\n\n /**\n * Update hidden conversation pin\n *\n * @param pin The pin to update (must be a 4-digit number between 0000-9999)\n *\n * @throws {ZaloApiError}\n */\n return async function updateHiddenConversPin(pin: string) {\n if (!pinRegex.test(pin)) {\n throw new ZaloApiError(\"Pin must be a 4-digit number between 0000-9999\");\n }\n\n const encryptedPin = encryptPin(pin);\n const params = {\n new_pin: encryptedPin,\n imei: ctx.imei,\n };\n\n const encryptedParams = utils.encodeAES(JSON.stringify(params));\n if (!encryptedParams) throw new ZaloApiError(\"Failed to encrypt params\");\n\n const response = await utils.request(utils.makeURL(serviceURL, { params: encryptedParams }), {\n method: \"GET\",\n });\n\n return utils.resolve(response);\n };\n});\n","import { ZaloApiError } from \"../Errors/ZaloApiError\";\nimport { apiFactory } from \"../utils\";\n\nimport type { LabelData } from \"../models/index\";\n\nexport type UpdateLabelsPayload = {\n labelData: LabelData[];\n version: number;\n};\n\nexport type UpdateLabelsResponse = {\n labelData: LabelData[];\n version: number;\n lastUpdateTime: number;\n};\n\nexport const updateLabelsFactory = apiFactory<UpdateLabelsResponse>()((api, ctx, utils) => {\n const serviceURL = utils.makeURL(`${api.zpwServiceMap.label[0]}/api/convlabel/update`);\n\n /**\n * Update labels\n *\n * @param label label data\n *\n * @throws {ZaloApiError}\n */\n return async function updateLabels(payload: UpdateLabelsPayload) {\n const params = {\n labelData: JSON.stringify(payload.labelData),\n version: payload.version,\n imei: ctx.imei,\n };\n\n const encryptedParams = utils.encodeAES(JSON.stringify(params));\n if (!encryptedParams) throw new ZaloApiError(\"Failed to encrypt message\");\n\n const response = await utils.request(serviceURL, {\n method: \"POST\",\n body: new URLSearchParams({\n params: encryptedParams,\n }),\n });\n\n const unFormatted = (await utils.resolve(response)) as unknown as Omit<UpdateLabelsResponse, \"labelData\"> & {\n labelData: string;\n };\n\n return {\n labelData: JSON.parse(unFormatted.labelData),\n version: unFormatted.version,\n lastUpdateTime: unFormatted.lastUpdateTime,\n };\n };\n});\n","import { ZaloApiError } from \"../Errors/ZaloApiError\";\nimport { apiFactory } from \"../utils\";\n\nexport enum UpdateLangAvailableLanguages {\n VI = \"VI\",\n EN = \"EN\",\n}\n\nexport type UpdateLangResponse = \"\";\n\nexport const updateLangFactory = apiFactory<UpdateLangResponse>()((api, _, utils) => {\n const serviceURL = utils.makeURL(`${api.zpwServiceMap.profile[0]}/api/social/profile/updatelang`);\n\n /**\n * Update language?\n *\n * @param language language to update (VI, EN)\n *\n * @note Calling this API alone will not update the user's language.\n * @throws {ZaloApiError}\n */\n return async function updateLang(language: UpdateLangAvailableLanguages = UpdateLangAvailableLanguages.VI) {\n const params = {\n language: language,\n };\n\n const encryptedParams = utils.encodeAES(JSON.stringify(params));\n if (!encryptedParams) throw new ZaloApiError(\"Failed to encrypt params\");\n\n const response = await utils.request(utils.makeURL(serviceURL, { params: encryptedParams }), {\n method: \"GET\",\n });\n\n return utils.resolve(response);\n };\n});\n","import { ZaloApiError } from \"../Errors/ZaloApiError\";\nimport { apiFactory } from \"../utils\";\n\nimport type { AttachmentSource, ProductCatalogItem } from \"../models/index\";\n\nexport type UpdateProductCatalogPayload = {\n catalogId: string;\n\n productId: string;\n productName: string;\n price: string;\n description: string;\n createTime: number;\n\n /**\n * Upto 5 media files are allowed, will be ignored if product_photos is provided\n */\n files?: AttachmentSource[];\n /**\n * List of product photo URLs, upto 5\n *\n * You can manually get the URL using `uploadProductPhoto` api\n */\n product_photos?: string[];\n};\n\nexport type UpdateProductCatalogResponse = {\n item: ProductCatalogItem;\n version_ls_catalog: number;\n version_catalog: number;\n};\n\nexport const updateProductCatalogFactory = apiFactory<UpdateProductCatalogResponse>()((api, _, utils) => {\n const serviceURL = utils.makeURL(`${api.zpwServiceMap.catalog[0]}/api/prodcatalog/product/update`);\n\n /**\n * Update product catalog?\n *\n * @param payload payload\n *\n * @note this API is used for zBusiness - Maximum 5 media files are supported\n * @throws {ZaloApiError}\n */\n return async function updateProductCatalog(payload: UpdateProductCatalogPayload) {\n const productPhoto = payload.product_photos || [];\n\n if (payload.files && payload.files.length == 0) {\n if (payload.files.length > 5) {\n throw new ZaloApiError(\"Maximum 5 media files are allowed\");\n }\n\n for (const mediaFile of payload.files) {\n const uploadMedia = await api.uploadProductPhoto({\n file: mediaFile,\n });\n\n const url = uploadMedia.normalUrl || uploadMedia.hdUrl;\n productPhoto.push(url);\n }\n }\n\n if (productPhoto.length > 5) {\n throw new ZaloApiError(\"Maximum 5 media files are allowed\");\n }\n\n const params = {\n product_id: payload.productId,\n product_name: payload.productName,\n price: payload.price,\n description: payload.description,\n product_photos: productPhoto,\n catalog_id: payload.catalogId,\n currency_unit: \"₫\",\n create_time: payload.createTime,\n };\n\n const encryptedParams = utils.encodeAES(JSON.stringify(params));\n if (!encryptedParams) throw new ZaloApiError(\"Failed to encrypt params\");\n\n const response = await utils.request(serviceURL, {\n method: \"POST\",\n body: new URLSearchParams({\n params: encryptedParams,\n }),\n });\n\n return utils.resolve(response);\n };\n});\n","import { ZaloApiError } from \"../Errors/ZaloApiError\";\nimport type { BusinessCategory, Gender } from \"../models/index\";\nimport { apiFactory } from \"../utils\";\n\nexport type UpdateProfilePayload = {\n profile: {\n name: string;\n /**\n * Date of birth in the format YYYY-MM-DD\n */\n dob: `${string}-${string}-${string}`;\n gender: Gender;\n };\n biz?: Partial<{\n cate: BusinessCategory;\n description: string;\n address: string;\n website: string;\n email: string;\n }>;\n};\n\nexport type UpdateProfileResponse = \"\";\n\nexport const updateProfileFactory = apiFactory<UpdateProfileResponse>()((api, ctx, utils) => {\n const serviceURL = utils.makeURL(`${api.zpwServiceMap.profile[0]}/api/social/profile/update`);\n\n /**\n * Change account setting information\n *\n * @param payload payload\n *\n * @note If your account is a Business Account, include the biz.cate field; otherwise the category will be removed.\n * You may leave the other biz fields empty if you don’t want to change them.\n *\n * @throws {ZaloApiError}\n */\n return async function updateProfile(payload: UpdateProfilePayload) {\n const params = {\n profile: JSON.stringify({\n name: payload.profile.name,\n dob: payload.profile.dob,\n gender: payload.profile.gender,\n }),\n biz: JSON.stringify({\n desc: payload.biz?.description,\n cate: payload.biz?.cate,\n addr: payload.biz?.address,\n website: payload.biz?.website,\n email: payload.biz?.email,\n }),\n language: ctx.language,\n };\n\n const encryptedParams = utils.encodeAES(JSON.stringify(params));\n if (!encryptedParams) throw new ZaloApiError(\"Failed to encrypt params\");\n\n const response = await utils.request(serviceURL, {\n method: \"POST\",\n body: new URLSearchParams({\n params: encryptedParams,\n }),\n });\n\n return utils.resolve(response);\n };\n});\n","import { ZaloApiError } from \"../Errors/ZaloApiError\";\nimport type { QuickMessage, AttachmentSource } from \"../models/index\";\nimport { apiFactory } from \"../utils\";\n\nexport type UpdateQuickMessagePayload = {\n keyword: string;\n title: string;\n media?: AttachmentSource;\n};\n\nexport type UpdateQuickMessageResponse = {\n item: QuickMessage;\n version: number;\n};\n\nexport const updateQuickMessageFactory = apiFactory<UpdateQuickMessageResponse>()((api, _ctx, utils) => {\n const serviceURL = utils.makeURL(`${api.zpwServiceMap.quick_message[0]}/api/quickmessage/update`);\n\n /**\n * Update quick message\n *\n * @param updatePayload - The payload containing data to update the quick message\n * @param itemId - The id of the quick message to update\n *\n * @note Zalo might throw an error with code 212 if the itemId does not exist.\n *\n * @throws {ZaloApiError}\n */\n return async function updateQuickMessage(updatePayload: UpdateQuickMessagePayload, itemId: number) {\n const isType = !updatePayload.media ? 0 : 1;\n\n const params: Record<string, unknown> = {\n itemId: itemId,\n keyword: updatePayload.keyword,\n message: {\n title: updatePayload.title,\n params: \"\",\n },\n type: isType,\n };\n\n if (isType === 1) {\n if (!updatePayload.media) throw new ZaloApiError(\"Media is required\");\n const uploadMedia = await api.uploadProductPhoto({\n file: updatePayload.media,\n });\n \n const photoId = uploadMedia.photoId;\n const thumbUrl = uploadMedia.thumbUrl;\n const normalUrl = uploadMedia.normalUrl;\n const hdUrl = uploadMedia.hdUrl;\n\n params.media = {\n items: [\n {\n type: 0,\n photoId: photoId,\n title: \"\",\n width: \"\",\n height: \"\",\n previewThumb: thumbUrl,\n rawUrl: normalUrl || hdUrl,\n thumbUrl: thumbUrl,\n normalUrl: normalUrl || hdUrl,\n hdUrl: hdUrl || normalUrl,\n },\n ],\n };\n }\n\n const encryptedParams = utils.encodeAES(JSON.stringify(params));\n if (!encryptedParams) throw new ZaloApiError(\"Failed to encrypt params\");\n\n const response = await utils.request(utils.makeURL(serviceURL, { params: encryptedParams }), {\n method: \"GET\",\n });\n\n return utils.resolve(response);\n };\n});\n","import { ZaloApiError } from \"../Errors/ZaloApiError\";\nimport { apiFactory } from \"../utils\";\n\nexport type UpdateSettingsResponse = \"\";\n\nexport enum UpdateSettingsType {\n ViewBirthday = \"view_birthday\",\n ShowOnlineStatus = \"show_online_status\",\n DisplaySeenStatus = \"display_seen_status\",\n ReceiveMessage = \"receive_message\",\n AcceptCall = \"accept_stranger_call\",\n AddFriendViaPhone = \"add_friend_via_phone\",\n AddFriendViaQR = \"add_friend_via_qr\",\n AddFriendViaGroup = \"add_friend_via_group\",\n AddFriendViaContact = \"add_friend_via_contact\",\n DisplayOnRecommendFriend = \"display_on_recommend_friend\",\n ArchivedChat = \"archivedChatStatus\",\n QuickMessage = \"quickMessageStatus\",\n}\n\nexport const updateSettingsFactory = apiFactory<UpdateSettingsResponse>()((_api, _ctx, utils) => {\n const serviceURL = utils.makeURL(`https://wpa.chat.zalo.me/api/setting/update`);\n\n /**\n * Set account settings\n *\n * @param type The type of setting to update\n * @param value\n *\n * ViewBirthday\n * * 0: hide\n * * 1: show full day/month/year\n * * 2: show day/month\n *\n * ShowOnlineStatus\n * * 0: hide\n * * 1: show\n *\n * DisplaySeenStatus\n * * 0: hide\n * * 1: show\n *\n * ReceiveMessage\n * * 1: everyone\n * * 2: only friends\n *\n * AcceptCall\n * * 2: only friends\n * * 3: everyone\n * * 4: friends and person who contacted\n *\n * AddFriendViaPhone\n * * 0: disable\n * * 1: enable\n *\n * AddFriendViaQR\n * * 0: disable\n * * 1: enable\n *\n * AddFriendViaGroup\n * * 0: disable\n * * 1: enable\n *\n * AddFriendViaContact\n * * 0: disable\n * * 1: enable\n *\n * DisplayOnRecommendFriend\n * * 0: disable\n * * 1: enable\n *\n * ArchivedChat\n * * 0: disable\n * * 1: enable\n *\n * QuickMessage\n * * 0: disable\n * * 1: enable\n *\n * @throws {ZaloApiError}\n */\n return async function updateSettings(type: UpdateSettingsType, value: number) {\n const params = {\n [type]: value,\n };\n\n const encryptedParams = utils.encodeAES(JSON.stringify(params));\n if (!encryptedParams) throw new ZaloApiError(\"Failed to encrypt params\");\n\n const response = await utils.request(utils.makeURL(serviceURL, { params: encryptedParams }), {\n method: \"GET\",\n });\n\n return utils.resolve(response);\n };\n});\n","import FormData from \"form-data\";\nimport castArray from \"lodash/castArray\";\n\nimport fs from \"node:fs\";\nimport type { UploadCallback } from \"../context\";\nimport { ZaloApiError } from \"../Errors/ZaloApiError\";\nimport { ThreadType, type AttachmentSource } from \"../models/index\";\nimport {\n apiFactory,\n getFileExtension,\n getFileName,\n getFileSize,\n getImageMetaData,\n getMd5LargeFileObject,\n resolveResponse,\n} from \"../utils\";\n\nexport type UploadAttachmentImageResponse = {\n normalUrl: string;\n photoId: string;\n finished: number | boolean;\n hdUrl: string;\n thumbUrl: string;\n clientFileId: number;\n chunkId: number;\n\n fileType: \"image\";\n width: number;\n height: number;\n totalSize: number;\n hdSize: number;\n};\n\nexport type UploadAttachmentVideoResponse = {\n finished: number | boolean;\n clientFileId: number;\n chunkId: number;\n\n fileType: \"video\";\n fileUrl: string;\n fileId: string;\n checksum: string;\n totalSize: number;\n fileName: string;\n};\n\nexport type UploadAttachmentFileResponse = {\n finished: number | boolean;\n clientFileId: number;\n chunkId: number;\n\n fileType: \"others\";\n fileUrl: string;\n fileId: string;\n checksum: string;\n totalSize: number;\n fileName: string;\n};\n\nexport type ImageData = {\n fileName: string;\n totalSize: number | undefined;\n width: number | undefined;\n height: number | undefined;\n};\n\nexport type FileData = {\n fileName: string;\n totalSize: number;\n};\n\nexport type UploadAttachmentType = UploadAttachmentImageResponse | UploadAttachmentVideoResponse | UploadAttachmentFileResponse;\nexport type UploadAttachmentResponse = UploadAttachmentType[];\n\ntype RawResponse = {\n finished: number | boolean;\n clientFileId: number;\n chunkId: number;\n\n fileId?: string;\n photoId?: string;\n\n normalUrl?: string;\n hdUrl?: string;\n thumbUrl?: string;\n};\n\ntype AttachmentData =\n | {\n filePath: string;\n fileType: \"image\";\n chunkContent: FormData[];\n fileData: ImageData;\n params: {\n toid?: string;\n grid?: string;\n totalChunk: number;\n fileName: string;\n clientId: number;\n totalSize: number;\n imei: string;\n isE2EE: number;\n jxl: number;\n chunkId: number;\n };\n source: AttachmentSource;\n }\n | {\n filePath: string;\n fileType: \"video\" | \"others\";\n chunkContent: FormData[];\n fileData: FileData;\n params: {\n toid?: string;\n grid?: string;\n totalChunk: number;\n fileName: string;\n clientId: number;\n totalSize: number;\n imei: string;\n isE2EE: number;\n jxl: number;\n chunkId: number;\n };\n source: AttachmentSource;\n };\n\nconst urlType = {\n image: \"photo_original/upload\",\n video: \"asyncfile/upload\",\n others: \"asyncfile/upload\",\n};\n\nexport const uploadAttachmentFactory = apiFactory()((api, ctx, utils) => {\n const serviceURL = `${api.zpwServiceMap.file[0]}/api`;\n const { sharefile } = ctx.settings!.features;\n\n function isExceedMaxFile(totalFile: number) {\n return totalFile > sharefile.max_file;\n }\n\n function isExceedMaxFileSize(fileSize: number) {\n return fileSize > sharefile.max_size_share_file_v3 * 1024 * 1024;\n }\n\n function isExtensionValid(ext: string) {\n return sharefile.restricted_ext_file.indexOf(ext) == -1;\n }\n\n /**\n * Upload an attachment to a thread\n *\n * @param sources path to files or attachment sources\n * @param threadId Group or User ID\n * @param type Message type (User or Group)\n *\n * @throws {ZaloApiError | ZaloApiMissingImageMetadataGetter}\n */\n return async function uploadAttachment(\n sources: AttachmentSource | AttachmentSource[],\n threadId: string,\n type: ThreadType = ThreadType.User,\n ): Promise<UploadAttachmentType[]> {\n if (!sources) throw new ZaloApiError(\"Missing sources\");\n const sourcesArray = castArray(sources);\n if (sourcesArray.length == 0) throw new ZaloApiError(\"Missing sources\");\n if (isExceedMaxFile(sourcesArray.length)) throw new ZaloApiError(\"Exceed maximum file of \" + sharefile.max_file);\n if (!threadId) throw new ZaloApiError(\"Missing threadId\");\n\n const chunkSize = ctx.settings!.features.sharefile.chunk_size_file;\n const isGroupMessage = type == ThreadType.Group;\n const attachmentsData: AttachmentData[] = [];\n const url = `${serviceURL}/${isGroupMessage ? \"group\" : \"message\"}/`;\n const typeParam = isGroupMessage ? \"11\" : \"2\";\n\n let clientId = Date.now();\n for (const source of sourcesArray) {\n const isFilePath = typeof source == \"string\";\n const isBuffer = typeof source == \"object\" && source.data instanceof Buffer;\n\n if (!isFilePath && !isBuffer) throw new ZaloApiError(\"Invalid source type\");\n if (!isFilePath && !source.filename) throw new ZaloApiError(\"Missing filename\");\n\n if (isFilePath && !fs.existsSync(source)) throw new ZaloApiError(\"File not found\");\n\n const extFile = getFileExtension(isFilePath ? source : source.filename).toLowerCase();\n const fileName = isFilePath ? getFileName(source) : source.filename;\n\n if (isExtensionValid(extFile) == false)\n throw new ZaloApiError(`File extension \"${extFile}\" is not allowed`);\n\n const data: AttachmentData = {\n filePath: isFilePath ? source : source.filename,\n chunkContent: [] as FormData[],\n params: {},\n source,\n } as AttachmentData;\n\n if (isGroupMessage) data.params.grid = threadId;\n else data.params.toid = threadId;\n\n switch (extFile) {\n case \"jpg\":\n case \"jpeg\":\n case \"png\":\n case \"webp\": {\n const imageData = isFilePath ? await getImageMetaData(ctx, source) : { ...source.metadata, fileName };\n if (isExceedMaxFileSize(imageData.totalSize!))\n throw new ZaloApiError(\n `File ${fileName} size exceed maximum size of ${sharefile.max_size_share_file_v3}MB`,\n );\n\n data.fileData = imageData;\n data.fileType = \"image\";\n\n data.params.totalChunk = Math.ceil(data.fileData.totalSize! / chunkSize);\n data.params.fileName = fileName;\n data.params.clientId = clientId++;\n data.params.totalSize = imageData.totalSize!;\n data.params.imei = ctx.imei;\n data.params.isE2EE = 0;\n data.params.jxl = 0;\n data.params.chunkId = 1;\n\n break;\n }\n case \"mp4\": {\n const videoSize = isFilePath ? await getFileSize(source) : source.metadata.totalSize;\n if (isExceedMaxFileSize(videoSize))\n throw new ZaloApiError(\n `File ${fileName} size exceed maximum size of ${sharefile.max_size_share_file_v3}MB`,\n );\n\n data.fileType = \"video\";\n data.fileData = {\n fileName,\n totalSize: videoSize,\n };\n\n data.params.totalChunk = Math.ceil(data.fileData.totalSize! / chunkSize);\n data.params.fileName = fileName;\n data.params.clientId = clientId++;\n data.params.totalSize = videoSize;\n data.params.imei = ctx.imei;\n data.params.isE2EE = 0;\n data.params.jxl = 0;\n data.params.chunkId = 1;\n\n break;\n }\n default: {\n const fileSize = isFilePath ? await getFileSize(source) : source.metadata.totalSize;\n if (isExceedMaxFileSize(fileSize))\n throw new ZaloApiError(\n `File ${fileName} size exceed maximum size of ${sharefile.max_size_share_file_v3}MB`,\n );\n\n data.fileType = \"others\";\n data.fileData = {\n fileName,\n totalSize: fileSize,\n };\n\n data.params.totalChunk = Math.ceil(data.fileData.totalSize! / chunkSize);\n data.params.fileName = fileName;\n data.params.clientId = clientId++;\n data.params.totalSize = fileSize;\n data.params.imei = ctx.imei;\n data.params.isE2EE = 0;\n data.params.jxl = 0;\n data.params.chunkId = 1;\n\n break;\n }\n }\n\n const fileBuffer = isFilePath ? await fs.promises.readFile(source) : source.data;\n for (let i = 0; i < data.params.totalChunk; i++) {\n const formData = new FormData();\n const slicedBuffer = fileBuffer.subarray(i * chunkSize, (i + 1) * chunkSize);\n formData.append(\"chunkContent\", slicedBuffer, {\n filename: fileName,\n contentType: \"application/octet-stream\",\n });\n\n data.chunkContent[i] = formData;\n }\n attachmentsData.push(data);\n }\n\n const requests = [],\n results: UploadAttachmentType[] = [];\n\n for (const data of attachmentsData) {\n for (let i = 0; i < data.params.totalChunk; i++) {\n const encryptedParams = utils.encodeAES(JSON.stringify(data.params));\n if (!encryptedParams) throw new ZaloApiError(\"Failed to encrypt message\");\n\n requests.push(\n utils\n .request(\n utils.makeURL(url + urlType[data.fileType], { type: typeParam, params: encryptedParams }),\n {\n method: \"POST\",\n headers: data.chunkContent[i].getHeaders(),\n body: data.chunkContent[i].getBuffer() as BodyInit,\n },\n )\n .then(async (response) => {\n /**\n * @TODO: better type rather than any\n */\n const resData = await resolveResponse<RawResponse>(ctx, response);\n\n if (resData && resData.fileId != \"-1\" && resData.photoId != \"-1\")\n await new Promise<void>((resolve) => {\n if (data.fileType == \"video\" || data.fileType == \"others\") {\n const uploadCallback: UploadCallback = async (wsData) => {\n const result = {\n fileType: data.fileType,\n ...resData,\n ...wsData,\n totalSize: data.fileData.totalSize,\n fileName: data.fileData.fileName,\n checksum: (\n await getMd5LargeFileObject(data.source, data.fileData.totalSize)\n ).data,\n };\n results.push(result);\n resolve();\n };\n\n ctx.uploadCallbacks.set(resData.fileId!.toString(), uploadCallback);\n }\n\n if (data.fileType == \"image\") {\n const result = {\n fileType: \"image\" as const,\n width: data.fileData.width!,\n height: data.fileData.height!,\n totalSize: data.fileData.totalSize!,\n hdSize: data.fileData.totalSize!,\n\n finished: resData.finished,\n normalUrl: resData.normalUrl!,\n hdUrl: resData.hdUrl!,\n thumbUrl: resData.thumbUrl!,\n chunkId: resData.chunkId,\n\n photoId: resData.photoId!,\n clientFileId: resData.clientFileId,\n };\n results.push(result);\n resolve();\n }\n });\n }),\n );\n data.params.chunkId++;\n }\n }\n\n await Promise.all(requests);\n\n return results;\n };\n});\n","import fs from \"node:fs\";\nimport FormData from \"form-data\";\nimport { ZaloApiError } from \"../Errors/ZaloApiError\";\nimport type { AttachmentSource } from \"../models/index\";\nimport { apiFactory, getImageMetaData } from \"../utils\";\n\nexport type UploadProductPhotoPayload = {\n file: AttachmentSource;\n};\n\nexport type UploadProductPhotoResponse = {\n normalUrl: string;\n photoId: string;\n finished: number;\n hdUrl: string;\n thumbUrl: string;\n clientFileId: number;\n chunkId: number;\n};\n\nexport const uploadProductPhotoFactory = apiFactory<UploadProductPhotoResponse>()((api, ctx, utils) => {\n const serviceURL = utils.makeURL(`${api.zpwServiceMap.file[0]}/api/product/upload/photo`);\n\n /**\n * Upload product photo for api quick message, product catalog or custom local storage\n *\n * @param payload file path or attachment source\n *\n * @throws {ZaloApiError | ZaloApiMissingImageMetadataGetter}\n */\n return async function uploadProductPhoto(payload: UploadProductPhotoPayload) {\n const isSourceFilePath = typeof payload.file == \"string\";\n const fileMetaData = isSourceFilePath\n ? await getImageMetaData(ctx, payload.file as string)\n : (payload.file as { metadata: { totalSize: number; width?: number; height?: number } }).metadata;\n\n const fileSize = fileMetaData.totalSize || 0;\n\n const fileBuffer = isSourceFilePath\n ? await fs.promises.readFile(payload.file as string)\n : (payload.file as { data: Buffer }).data;\n\n const formData = new FormData();\n formData.append(\"chunkContent\", fileBuffer, {\n filename: \"undefined\",\n contentType: \"application/octet-stream\",\n });\n\n const params = {\n totalChunk: 1,\n fileName: `Base64_Img_Picker_${Date.now()}.jpg`,\n clientId: Date.now(),\n totalSize: fileSize,\n imei: ctx.imei,\n chunkId: 1,\n toid: ctx.loginInfo.send2me_id,\n featureId: 1,\n };\n\n const encryptedParams = utils.encodeAES(JSON.stringify(params));\n if (!encryptedParams) throw new ZaloApiError(\"Failed to encrypt params\");\n\n const response = await utils.request(\n utils.makeURL(serviceURL, {\n params: encryptedParams,\n }),\n {\n method: \"POST\",\n headers: formData.getHeaders(),\n body: formData.getBuffer(),\n },\n );\n\n return utils.resolve(response);\n };\n});\n","import { ZaloApiError } from \"../Errors/ZaloApiError\";\nimport castArray from \"lodash/castArray\";\n\nimport type { PollOptions } from \"../models/index\";\nimport { apiFactory } from \"../utils\";\n\nexport type VotePollResponse = {\n options: PollOptions[];\n};\n\nexport const votePollFactory = apiFactory<VotePollResponse>()((api, ctx, utils) => {\n const serviceURL = utils.makeURL(`${api.zpwServiceMap.group[0]}/api/poll/vote`);\n\n /**\n * Vote on a poll\n *\n * @param pollId The ID of the poll to vote on\n * @param optionId The ID(s) of the option to vote on\n *\n * @throws ZaloApiError\n */\n return async function votePoll(pollId: number, optionId: number | number[]) {\n const optionIds = castArray(optionId);\n\n const params = {\n poll_id: pollId,\n option_ids: optionIds, // unvote = empty array\n imei: ctx.imei,\n };\n\n const encryptedParams = utils.encodeAES(JSON.stringify(params));\n if (!encryptedParams) throw new ZaloApiError(\"Failed to encrypt params\");\n\n const response = await utils.request(utils.makeURL(serviceURL, { params: encryptedParams }), {\n method: \"GET\",\n });\n\n return utils.resolve(response);\n };\n});\n","import { type ContextSession } from \"../context\";\nimport { apiFactory, type FactoryUtils } from \"../utils\";\n\nexport type CustomAPIProps<T, K> = { ctx: ContextSession; utils: FactoryUtils<T>; props: K };\nexport type CustomAPICallback<T, K> = (props: CustomAPIProps<T, K>) => T | Promise<T>;\n\n/* eslint-disable */\nexport const customFactory = apiFactory<any>()((api, ctx, utils) => {\n return function custom<T, K = any>(name: string, callback: CustomAPICallback<T, K>) {\n Object.defineProperty(api, name, {\n value: function (props: K) {\n return callback({ ctx, utils, props });\n },\n writable: false,\n enumerable: false,\n configurable: false,\n });\n };\n});\n","import { Listener } from \"./apis/listen\";\n\nimport { acceptFriendRequestFactory } from \"./apis/acceptFriendRequest\";\nimport { addGroupBlockedMemberFactory } from \"./apis/addGroupBlockedMember\";\nimport { addGroupDeputyFactory } from \"./apis/addGroupDeputy\";\nimport { addPollOptionsFactory } from \"./apis/addPollOptions\";\nimport { addQuickMessageFactory } from \"./apis/addQuickMessage\";\nimport { addReactionFactory } from \"./apis/addReaction\";\nimport { addUnreadMarkFactory } from \"./apis/addUnreadMark\";\nimport { addUserToGroupFactory } from \"./apis/addUserToGroup\";\nimport { blockUserFactory } from \"./apis/blockUser\";\nimport { blockViewFeedFactory } from \"./apis/blockViewFeed\";\nimport { changeAccountAvatarFactory } from \"./apis/changeAccountAvatar\";\nimport { changeFriendAliasFactory } from \"./apis/changeFriendAlias\";\nimport { changeGroupAvatarFactory } from \"./apis/changeGroupAvatar\";\nimport { changeGroupNameFactory } from \"./apis/changeGroupName\";\nimport { changeGroupOwnerFactory } from \"./apis/changeGroupOwner\";\nimport { createAutoReplyFactory } from \"./apis/createAutoReply\";\nimport { createCatalogFactory } from \"./apis/createCatalog\";\nimport { createGroupFactory } from \"./apis/createGroup\";\nimport { createNoteFactory } from \"./apis/createNote\";\nimport { createPollFactory } from \"./apis/createPoll\";\nimport { createProductCatalogFactory } from \"./apis/createProductCatalog\";\nimport { createReminderFactory } from \"./apis/createReminder\";\nimport { deleteAutoReplyFactory } from \"./apis/deleteAutoReply\";\nimport { deleteAvatarFactory } from \"./apis/deleteAvatar\";\nimport { deleteCatalogFactory } from \"./apis/deleteCatalog\";\nimport { deleteChatFactory } from \"./apis/deleteChat\";\nimport { deleteGroupInviteBoxFactory } from \"./apis/deleteGroupInviteBox\";\nimport { deleteMessageFactory } from \"./apis/deleteMessage\";\nimport { deleteProductCatalogFactory } from \"./apis/deleteProductCatalog\";\nimport { disableGroupLinkFactory } from \"./apis/disableGroupLink\";\nimport { disperseGroupFactory } from \"./apis/disperseGroup\";\nimport { editNoteFactory } from \"./apis/editNote\";\nimport { editReminderFactory } from \"./apis/editReminder\";\nimport { enableGroupLinkFactory } from \"./apis/enableGroupLink\";\nimport { fetchAccountInfoFactory } from \"./apis/fetchAccountInfo\";\nimport { findUserFactory } from \"./apis/findUser\";\nimport { forwardMessageFactory } from \"./apis/forwardMessage\";\nimport { getAliasListFactory } from \"./apis/getAliasList\";\nimport { getAllFriendsFactory } from \"./apis/getAllFriends\";\nimport { getAllGroupsFactory } from \"./apis/getAllGroups\";\nimport { getArchivedChatListFactory } from \"./apis/getArchivedChatList\";\nimport { getAutoDeleteChatFactory } from \"./apis/getAutoDeleteChat\";\nimport { getAutoReplyListFactory } from \"./apis/getAutoReplyList\";\nimport { getAvatarListFactory } from \"./apis/getAvatarList\";\nimport { getBizAccountFactory } from \"./apis/getBizAccount\";\nimport { getCatalogListFactory } from \"./apis/getCatalogList\";\nimport { getContextFactory } from \"./apis/getContext\";\nimport { getCookieFactory } from \"./apis/getCookie\";\nimport { getFriendBoardListFactory } from \"./apis/getFriendBoardList\";\nimport { getFriendOnlinesFactory } from \"./apis/getFriendOnlines\";\nimport { getFriendRecommendationsFactory } from \"./apis/getFriendRecommendations\";\nimport { getFriendRequestStatusFactory } from \"./apis/getFriendRequestStatus\";\nimport { getGroupBlockedMemberFactory } from \"./apis/getGroupBlockedMember\";\nimport { getGroupInfoFactory } from \"./apis/getGroupInfo\";\nimport { getGroupInviteBoxInfoFactory } from \"./apis/getGroupInviteBoxInfo\";\nimport { getGroupInviteBoxListFactory } from \"./apis/getGroupInviteBoxList\";\nimport { getGroupLinkDetailFactory } from \"./apis/getGroupLinkDetail\";\nimport { getGroupLinkInfoFactory } from \"./apis/getGroupLinkInfo\";\nimport { getGroupMembersInfoFactory } from \"./apis/getGroupMembersInfo\";\nimport { getHiddenConversationsFactory } from \"./apis/getHiddenConversations\";\nimport { getLabelsFactory } from \"./apis/getLabels\";\nimport { getListBoardFactory } from \"./apis/getListBoard\";\nimport { getListReminderFactory } from \"./apis/getListReminder\";\nimport { getMuteFactory } from \"./apis/getMute\";\nimport { getOwnIdFactory } from \"./apis/getOwnId\";\nimport { getPendingGroupMembersFactory } from \"./apis/getPendingGroupMembers\";\nimport { getPinConversationsFactory } from \"./apis/getPinConversations\";\nimport { getPollDetailFactory } from \"./apis/getPollDetail\";\nimport { getProductCatalogListFactory } from \"./apis/getProductCatalogList\";\nimport { getQRFactory } from \"./apis/getQR\";\nimport { getQuickMessageListFactory } from \"./apis/getQuickMessageList\";\nimport { getRelatedFriendGroupFactory } from \"./apis/getRelatedFriendGroup\";\nimport { getReminderFactory } from \"./apis/getReminder\";\nimport { getReminderResponsesFactory } from \"./apis/getReminderResponses\";\nimport { getSentFriendRequestFactory } from \"./apis/getSentFriendRequest\";\nimport { getSettingsFactory } from \"./apis/getSettings\";\nimport { getStickersFactory } from \"./apis/getStickers\";\nimport { getStickersDetailFactory } from \"./apis/getStickersDetail\";\nimport { getUnreadMarkFactory } from \"./apis/getUnreadMark\";\nimport { getUserInfoFactory } from \"./apis/getUserInfo\";\nimport { inviteUserToGroupsFactory } from \"./apis/inviteUserToGroups\";\nimport { joinGroupInviteBoxFactory } from \"./apis/joinGroupInviteBox\";\nimport { joinGroupLinkFactory } from \"./apis/joinGroupLink\";\nimport { keepAliveFactory } from \"./apis/keepAlive\";\nimport { lastOnlineFactory } from \"./apis/lastOnline\";\nimport { leaveGroupFactory } from \"./apis/leaveGroup\";\nimport { lockPollFactory } from \"./apis/lockPoll\";\nimport { parseLinkFactory } from \"./apis/parseLink\";\nimport { rejectFriendRequestFactory } from \"./apis/rejectFriendRequest\";\nimport { removeFriendFactory } from \"./apis/removeFriend\";\nimport { removeFriendAliasFactory } from \"./apis/removeFriendAlias\";\nimport { removeGroupBlockedMemberFactory } from \"./apis/removeGroupBlockedMember\";\nimport { removeGroupDeputyFactory } from \"./apis/removeGroupDeputy\";\nimport { removeQuickMessageFactory } from \"./apis/removeQuickMessage\";\nimport { removeReminderFactory } from \"./apis/removeReminder\";\nimport { removeUnreadMarkFactory } from \"./apis/removeUnreadMark\";\nimport { removeUserFromGroupFactory } from \"./apis/removeUserFromGroup\";\nimport { resetHiddenConversPinFactory } from \"./apis/resetHiddenConversPin\";\nimport { reuseAvatarFactory } from \"./apis/reuseAvatar\";\nimport { reviewPendingMemberRequestFactory } from \"./apis/reviewPendingMemberRequest\";\nimport { sendBankCardFactory } from \"./apis/sendBankCard\";\nimport { sendCardFactory } from \"./apis/sendCard\";\nimport { sendDeliveredEventFactory } from \"./apis/sendDeliveredEvent\";\nimport { sendFriendRequestFactory } from \"./apis/sendFriendRequest\";\nimport { sendLinkFactory } from \"./apis/sendLink\";\nimport { sendMessageFactory } from \"./apis/sendMessage\";\nimport { sendReportFactory } from \"./apis/sendReport\";\nimport { sendSeenEventFactory } from \"./apis/sendSeenEvent\";\nimport { sendStickerFactory } from \"./apis/sendSticker\";\nimport { sendTypingEventFactory } from \"./apis/sendTypingEvent\";\nimport { sendVideoFactory } from \"./apis/sendVideo\";\nimport { sendVoiceFactory } from \"./apis/sendVoice\";\nimport { setHiddenConversationsFactory } from \"./apis/setHiddenConversations\";\nimport { setMuteFactory } from \"./apis/setMute\";\nimport { setPinnedConversationsFactory } from \"./apis/setPinnedConversations\";\nimport { sharePollFactory } from \"./apis/sharePoll\";\nimport { unblockUserFactory } from \"./apis/unblockUser\";\nimport { undoFactory } from \"./apis/undo\";\nimport { undoFriendRequestFactory } from \"./apis/undoFriendRequest\";\nimport { updateActiveStatusFactory } from \"./apis/updateActiveStatus\";\nimport { updateAutoDeleteChatFactory } from \"./apis/updateAutoDeleteChat\";\nimport { updateAutoReplyFactory } from \"./apis/updateAutoReply\";\nimport { updateCatalogFactory } from \"./apis/updateCatalog\";\nimport { updateGroupSettingsFactory } from \"./apis/updateGroupSettings\";\nimport { updateHiddenConversPinFactory } from \"./apis/updateHiddenConversPin\";\nimport { updateLabelsFactory } from \"./apis/updateLabels\";\nimport { updateLangFactory } from \"./apis/updateLang\";\nimport { updateProductCatalogFactory } from \"./apis/updateProductCatalog\";\nimport { updateProfileFactory } from \"./apis/updateProfile\";\nimport { updateQuickMessageFactory } from \"./apis/updateQuickMessage\";\nimport { updateSettingsFactory } from \"./apis/updateSettings\";\nimport { uploadAttachmentFactory } from \"./apis/uploadAttachment\";\nimport { uploadProductPhotoFactory } from \"./apis/uploadProductPhoto\";\nimport { votePollFactory } from \"./apis/votePoll\";\nimport { customFactory } from \"./apis/custom\";\nimport type { ZPWServiceMap, ContextSession } from \"./context\";\n\nexport class API {\n public zpwServiceMap: ZPWServiceMap;\n public listener: Listener;\n\n public acceptFriendRequest: ReturnType<typeof acceptFriendRequestFactory>;\n public addGroupBlockedMember: ReturnType<typeof addGroupBlockedMemberFactory>;\n public addGroupDeputy: ReturnType<typeof addGroupDeputyFactory>;\n public addPollOptions: ReturnType<typeof addPollOptionsFactory>;\n public addQuickMessage: ReturnType<typeof addQuickMessageFactory>;\n public addReaction: ReturnType<typeof addReactionFactory>;\n public addUnreadMark: ReturnType<typeof addUnreadMarkFactory>;\n public addUserToGroup: ReturnType<typeof addUserToGroupFactory>;\n public blockUser: ReturnType<typeof blockUserFactory>;\n public blockViewFeed: ReturnType<typeof blockViewFeedFactory>;\n public changeAccountAvatar: ReturnType<typeof changeAccountAvatarFactory>;\n public changeFriendAlias: ReturnType<typeof changeFriendAliasFactory>;\n public changeGroupAvatar: ReturnType<typeof changeGroupAvatarFactory>;\n public changeGroupName: ReturnType<typeof changeGroupNameFactory>;\n public changeGroupOwner: ReturnType<typeof changeGroupOwnerFactory>;\n public createAutoReply: ReturnType<typeof createAutoReplyFactory>;\n public createCatalog: ReturnType<typeof createCatalogFactory>;\n public createGroup: ReturnType<typeof createGroupFactory>;\n public createNote: ReturnType<typeof createNoteFactory>;\n public createPoll: ReturnType<typeof createPollFactory>;\n public createProductCatalog: ReturnType<typeof createProductCatalogFactory>;\n public createReminder: ReturnType<typeof createReminderFactory>;\n public deleteAutoReply: ReturnType<typeof deleteAutoReplyFactory>;\n public deleteAvatar: ReturnType<typeof deleteAvatarFactory>;\n public deleteCatalog: ReturnType<typeof deleteCatalogFactory>;\n public deleteChat: ReturnType<typeof deleteChatFactory>;\n public deleteGroupInviteBox: ReturnType<typeof deleteGroupInviteBoxFactory>;\n public deleteMessage: ReturnType<typeof deleteMessageFactory>;\n public deleteProductCatalog: ReturnType<typeof deleteProductCatalogFactory>;\n public disableGroupLink: ReturnType<typeof disableGroupLinkFactory>;\n public disperseGroup: ReturnType<typeof disperseGroupFactory>;\n public editNote: ReturnType<typeof editNoteFactory>;\n public editReminder: ReturnType<typeof editReminderFactory>;\n public enableGroupLink: ReturnType<typeof enableGroupLinkFactory>;\n public fetchAccountInfo: ReturnType<typeof fetchAccountInfoFactory>;\n public findUser: ReturnType<typeof findUserFactory>;\n public forwardMessage: ReturnType<typeof forwardMessageFactory>;\n public getAliasList: ReturnType<typeof getAliasListFactory>;\n public getAllFriends: ReturnType<typeof getAllFriendsFactory>;\n public getAllGroups: ReturnType<typeof getAllGroupsFactory>;\n public getArchivedChatList: ReturnType<typeof getArchivedChatListFactory>;\n public getAutoDeleteChat: ReturnType<typeof getAutoDeleteChatFactory>;\n public getAutoReplyList: ReturnType<typeof getAutoReplyListFactory>;\n public getAvatarList: ReturnType<typeof getAvatarListFactory>;\n public getBizAccount: ReturnType<typeof getBizAccountFactory>;\n public getCatalogList: ReturnType<typeof getCatalogListFactory>;\n public getContext: ReturnType<typeof getContextFactory>;\n public getCookie: ReturnType<typeof getCookieFactory>;\n public getFriendBoardList: ReturnType<typeof getFriendBoardListFactory>;\n public getFriendOnlines: ReturnType<typeof getFriendOnlinesFactory>;\n public getFriendRecommendations: ReturnType<typeof getFriendRecommendationsFactory>;\n public getFriendRequestStatus: ReturnType<typeof getFriendRequestStatusFactory>;\n public getGroupBlockedMember: ReturnType<typeof getGroupBlockedMemberFactory>;\n public getGroupInfo: ReturnType<typeof getGroupInfoFactory>;\n public getGroupInviteBoxInfo: ReturnType<typeof getGroupInviteBoxInfoFactory>;\n public getGroupInviteBoxList: ReturnType<typeof getGroupInviteBoxListFactory>;\n public getGroupLinkDetail: ReturnType<typeof getGroupLinkDetailFactory>;\n public getGroupLinkInfo: ReturnType<typeof getGroupLinkInfoFactory>;\n public getGroupMembersInfo: ReturnType<typeof getGroupMembersInfoFactory>;\n public getHiddenConversations: ReturnType<typeof getHiddenConversationsFactory>;\n public getLabels: ReturnType<typeof getLabelsFactory>;\n public getListBoard: ReturnType<typeof getListBoardFactory>;\n public getListReminder: ReturnType<typeof getListReminderFactory>;\n public getMute: ReturnType<typeof getMuteFactory>;\n public getOwnId: ReturnType<typeof getOwnIdFactory>;\n public getPendingGroupMembers: ReturnType<typeof getPendingGroupMembersFactory>;\n public getPinConversations: ReturnType<typeof getPinConversationsFactory>;\n public getPollDetail: ReturnType<typeof getPollDetailFactory>;\n public getProductCatalogList: ReturnType<typeof getProductCatalogListFactory>;\n public getQR: ReturnType<typeof getQRFactory>;\n public getQuickMessageList: ReturnType<typeof getQuickMessageListFactory>;\n public getRelatedFriendGroup: ReturnType<typeof getRelatedFriendGroupFactory>;\n public getReminder: ReturnType<typeof getReminderFactory>;\n public getReminderResponses: ReturnType<typeof getReminderResponsesFactory>;\n public getSentFriendRequest: ReturnType<typeof getSentFriendRequestFactory>;\n public getSettings: ReturnType<typeof getSettingsFactory>;\n public getStickers: ReturnType<typeof getStickersFactory>;\n public getStickersDetail: ReturnType<typeof getStickersDetailFactory>;\n public getUnreadMark: ReturnType<typeof getUnreadMarkFactory>;\n public getUserInfo: ReturnType<typeof getUserInfoFactory>;\n public inviteUserToGroups: ReturnType<typeof inviteUserToGroupsFactory>;\n public joinGroupInviteBox: ReturnType<typeof joinGroupInviteBoxFactory>;\n public joinGroupLink: ReturnType<typeof joinGroupLinkFactory>;\n public keepAlive: ReturnType<typeof keepAliveFactory>;\n public lastOnline: ReturnType<typeof lastOnlineFactory>;\n public leaveGroup: ReturnType<typeof leaveGroupFactory>;\n public lockPoll: ReturnType<typeof lockPollFactory>;\n public parseLink: ReturnType<typeof parseLinkFactory>;\n public rejectFriendRequest: ReturnType<typeof rejectFriendRequestFactory>;\n public removeFriend: ReturnType<typeof removeFriendFactory>;\n public removeFriendAlias: ReturnType<typeof removeFriendAliasFactory>;\n public removeGroupBlockedMember: ReturnType<typeof removeGroupBlockedMemberFactory>;\n public removeGroupDeputy: ReturnType<typeof removeGroupDeputyFactory>;\n public removeQuickMessage: ReturnType<typeof removeQuickMessageFactory>;\n public removeReminder: ReturnType<typeof removeReminderFactory>;\n public removeUnreadMark: ReturnType<typeof removeUnreadMarkFactory>;\n public removeUserFromGroup: ReturnType<typeof removeUserFromGroupFactory>;\n public resetHiddenConversPin: ReturnType<typeof resetHiddenConversPinFactory>;\n public reuseAvatar: ReturnType<typeof reuseAvatarFactory>;\n public reviewPendingMemberRequest: ReturnType<typeof reviewPendingMemberRequestFactory>;\n public sendBankCard: ReturnType<typeof sendBankCardFactory>;\n public sendCard: ReturnType<typeof sendCardFactory>;\n public sendDeliveredEvent: ReturnType<typeof sendDeliveredEventFactory>;\n public sendFriendRequest: ReturnType<typeof sendFriendRequestFactory>;\n public sendLink: ReturnType<typeof sendLinkFactory>;\n public sendMessage: ReturnType<typeof sendMessageFactory>;\n public sendReport: ReturnType<typeof sendReportFactory>;\n public sendSeenEvent: ReturnType<typeof sendSeenEventFactory>;\n public sendSticker: ReturnType<typeof sendStickerFactory>;\n public sendTypingEvent: ReturnType<typeof sendTypingEventFactory>;\n public sendVideo: ReturnType<typeof sendVideoFactory>;\n public sendVoice: ReturnType<typeof sendVoiceFactory>;\n public setHiddenConversations: ReturnType<typeof setHiddenConversationsFactory>;\n public setMute: ReturnType<typeof setMuteFactory>;\n public setPinnedConversations: ReturnType<typeof setPinnedConversationsFactory>;\n public sharePoll: ReturnType<typeof sharePollFactory>;\n public unblockUser: ReturnType<typeof unblockUserFactory>;\n public undo: ReturnType<typeof undoFactory>;\n public undoFriendRequest: ReturnType<typeof undoFriendRequestFactory>;\n public updateActiveStatus: ReturnType<typeof updateActiveStatusFactory>;\n public updateAutoDeleteChat: ReturnType<typeof updateAutoDeleteChatFactory>;\n public updateAutoReply: ReturnType<typeof updateAutoReplyFactory>;\n public updateCatalog: ReturnType<typeof updateCatalogFactory>;\n public updateGroupSettings: ReturnType<typeof updateGroupSettingsFactory>;\n public updateHiddenConversPin: ReturnType<typeof updateHiddenConversPinFactory>;\n public updateLabels: ReturnType<typeof updateLabelsFactory>;\n public updateLang: ReturnType<typeof updateLangFactory>;\n public updateProductCatalog: ReturnType<typeof updateProductCatalogFactory>;\n public updateProfile: ReturnType<typeof updateProfileFactory>;\n public updateQuickMessage: ReturnType<typeof updateQuickMessageFactory>;\n public updateSettings: ReturnType<typeof updateSettingsFactory>;\n public uploadAttachment: ReturnType<typeof uploadAttachmentFactory>;\n public uploadProductPhoto: ReturnType<typeof uploadProductPhotoFactory>;\n public votePoll: ReturnType<typeof votePollFactory>;\n\n public custom: ReturnType<typeof customFactory>;\n\n constructor(ctx: ContextSession, zpwServiceMap: ZPWServiceMap, wsUrls: string[]) {\n this.zpwServiceMap = zpwServiceMap;\n this.listener = new Listener(ctx, wsUrls);\n\n this.acceptFriendRequest = acceptFriendRequestFactory(ctx, this);\n this.addGroupBlockedMember = addGroupBlockedMemberFactory(ctx, this);\n this.addGroupDeputy = addGroupDeputyFactory(ctx, this);\n this.addPollOptions = addPollOptionsFactory(ctx, this);\n this.addQuickMessage = addQuickMessageFactory(ctx, this);\n this.addReaction = addReactionFactory(ctx, this);\n this.addUnreadMark = addUnreadMarkFactory(ctx, this);\n this.addUserToGroup = addUserToGroupFactory(ctx, this);\n this.blockUser = blockUserFactory(ctx, this);\n this.blockViewFeed = blockViewFeedFactory(ctx, this);\n this.changeAccountAvatar = changeAccountAvatarFactory(ctx, this);\n this.changeFriendAlias = changeFriendAliasFactory(ctx, this);\n this.changeGroupAvatar = changeGroupAvatarFactory(ctx, this);\n this.changeGroupName = changeGroupNameFactory(ctx, this);\n this.changeGroupOwner = changeGroupOwnerFactory(ctx, this);\n this.createAutoReply = createAutoReplyFactory(ctx, this);\n this.createCatalog = createCatalogFactory(ctx, this);\n this.createGroup = createGroupFactory(ctx, this);\n this.createNote = createNoteFactory(ctx, this);\n this.createPoll = createPollFactory(ctx, this);\n this.createProductCatalog = createProductCatalogFactory(ctx, this);\n this.createReminder = createReminderFactory(ctx, this);\n this.deleteAutoReply = deleteAutoReplyFactory(ctx, this);\n this.deleteAvatar = deleteAvatarFactory(ctx, this);\n this.deleteCatalog = deleteCatalogFactory(ctx, this);\n this.deleteChat = deleteChatFactory(ctx, this);\n this.deleteGroupInviteBox = deleteGroupInviteBoxFactory(ctx, this);\n this.deleteMessage = deleteMessageFactory(ctx, this);\n this.deleteProductCatalog = deleteProductCatalogFactory(ctx, this);\n this.disableGroupLink = disableGroupLinkFactory(ctx, this);\n this.disperseGroup = disperseGroupFactory(ctx, this);\n this.editNote = editNoteFactory(ctx, this);\n this.editReminder = editReminderFactory(ctx, this);\n this.enableGroupLink = enableGroupLinkFactory(ctx, this);\n this.fetchAccountInfo = fetchAccountInfoFactory(ctx, this);\n this.findUser = findUserFactory(ctx, this);\n this.forwardMessage = forwardMessageFactory(ctx, this);\n this.getAliasList = getAliasListFactory(ctx, this);\n this.getAllFriends = getAllFriendsFactory(ctx, this);\n this.getAllGroups = getAllGroupsFactory(ctx, this);\n this.getArchivedChatList = getArchivedChatListFactory(ctx, this);\n this.getAutoDeleteChat = getAutoDeleteChatFactory(ctx, this);\n this.getAutoReplyList = getAutoReplyListFactory(ctx, this);\n this.getAvatarList = getAvatarListFactory(ctx, this);\n this.getBizAccount = getBizAccountFactory(ctx, this);\n this.getCatalogList = getCatalogListFactory(ctx, this);\n this.getContext = getContextFactory(ctx, this);\n this.getCookie = getCookieFactory(ctx, this);\n this.getFriendBoardList = getFriendBoardListFactory(ctx, this);\n this.getFriendOnlines = getFriendOnlinesFactory(ctx, this);\n this.getFriendRecommendations = getFriendRecommendationsFactory(ctx, this);\n this.getFriendRequestStatus = getFriendRequestStatusFactory(ctx, this);\n this.getGroupBlockedMember = getGroupBlockedMemberFactory(ctx, this);\n this.getGroupInfo = getGroupInfoFactory(ctx, this);\n this.getGroupInviteBoxInfo = getGroupInviteBoxInfoFactory(ctx, this);\n this.getGroupInviteBoxList = getGroupInviteBoxListFactory(ctx, this);\n this.getGroupLinkDetail = getGroupLinkDetailFactory(ctx, this);\n this.getGroupLinkInfo = getGroupLinkInfoFactory(ctx, this);\n this.getGroupMembersInfo = getGroupMembersInfoFactory(ctx, this);\n this.getHiddenConversations = getHiddenConversationsFactory(ctx, this);\n this.getLabels = getLabelsFactory(ctx, this);\n this.getListBoard = getListBoardFactory(ctx, this);\n this.getListReminder = getListReminderFactory(ctx, this);\n this.getMute = getMuteFactory(ctx, this);\n this.getOwnId = getOwnIdFactory(ctx, this);\n this.getPendingGroupMembers = getPendingGroupMembersFactory(ctx, this);\n this.getPinConversations = getPinConversationsFactory(ctx, this);\n this.getPollDetail = getPollDetailFactory(ctx, this);\n this.getProductCatalogList = getProductCatalogListFactory(ctx, this);\n this.getQR = getQRFactory(ctx, this);\n this.getQuickMessageList = getQuickMessageListFactory(ctx, this);\n this.getRelatedFriendGroup = getRelatedFriendGroupFactory(ctx, this);\n this.getReminder = getReminderFactory(ctx, this);\n this.getReminderResponses = getReminderResponsesFactory(ctx, this);\n this.getSentFriendRequest = getSentFriendRequestFactory(ctx, this);\n this.getSettings = getSettingsFactory(ctx, this);\n this.getStickers = getStickersFactory(ctx, this);\n this.getStickersDetail = getStickersDetailFactory(ctx, this);\n this.getUnreadMark = getUnreadMarkFactory(ctx, this);\n this.getUserInfo = getUserInfoFactory(ctx, this);\n this.inviteUserToGroups = inviteUserToGroupsFactory(ctx, this);\n this.joinGroupInviteBox = joinGroupInviteBoxFactory(ctx, this);\n this.joinGroupLink = joinGroupLinkFactory(ctx, this);\n this.keepAlive = keepAliveFactory(ctx, this);\n this.lastOnline = lastOnlineFactory(ctx, this);\n this.leaveGroup = leaveGroupFactory(ctx, this);\n this.lockPoll = lockPollFactory(ctx, this);\n this.parseLink = parseLinkFactory(ctx, this);\n this.rejectFriendRequest = rejectFriendRequestFactory(ctx, this);\n this.removeFriend = removeFriendFactory(ctx, this);\n this.removeFriendAlias = removeFriendAliasFactory(ctx, this);\n this.removeGroupBlockedMember = removeGroupBlockedMemberFactory(ctx, this);\n this.removeGroupDeputy = removeGroupDeputyFactory(ctx, this);\n this.removeQuickMessage = removeQuickMessageFactory(ctx, this);\n this.removeReminder = removeReminderFactory(ctx, this);\n this.removeUnreadMark = removeUnreadMarkFactory(ctx, this);\n this.removeUserFromGroup = removeUserFromGroupFactory(ctx, this);\n this.resetHiddenConversPin = resetHiddenConversPinFactory(ctx, this);\n this.reuseAvatar = reuseAvatarFactory(ctx, this);\n this.reviewPendingMemberRequest = reviewPendingMemberRequestFactory(ctx, this);\n this.sendBankCard = sendBankCardFactory(ctx, this);\n this.sendCard = sendCardFactory(ctx, this);\n this.sendDeliveredEvent = sendDeliveredEventFactory(ctx, this);\n this.sendFriendRequest = sendFriendRequestFactory(ctx, this);\n this.sendLink = sendLinkFactory(ctx, this);\n this.sendMessage = sendMessageFactory(ctx, this);\n this.sendReport = sendReportFactory(ctx, this);\n this.sendSeenEvent = sendSeenEventFactory(ctx, this);\n this.sendSticker = sendStickerFactory(ctx, this);\n this.sendTypingEvent = sendTypingEventFactory(ctx, this);\n this.sendVideo = sendVideoFactory(ctx, this);\n this.sendVoice = sendVoiceFactory(ctx, this);\n this.setHiddenConversations = setHiddenConversationsFactory(ctx, this);\n this.setMute = setMuteFactory(ctx, this);\n this.setPinnedConversations = setPinnedConversationsFactory(ctx, this);\n this.sharePoll = sharePollFactory(ctx, this);\n this.unblockUser = unblockUserFactory(ctx, this);\n this.undo = undoFactory(ctx, this);\n this.undoFriendRequest = undoFriendRequestFactory(ctx, this);\n this.updateActiveStatus = updateActiveStatusFactory(ctx, this);\n this.updateAutoDeleteChat = updateAutoDeleteChatFactory(ctx, this);\n this.updateAutoReply = updateAutoReplyFactory(ctx, this);\n this.updateCatalog = updateCatalogFactory(ctx, this);\n this.updateGroupSettings = updateGroupSettingsFactory(ctx, this);\n this.updateHiddenConversPin = updateHiddenConversPinFactory(ctx, this);\n this.updateLabels = updateLabelsFactory(ctx, this);\n this.updateLang = updateLangFactory(ctx, this);\n this.updateProductCatalog = updateProductCatalogFactory(ctx, this);\n this.updateProfile = updateProfileFactory(ctx, this);\n this.updateQuickMessage = updateQuickMessageFactory(ctx, this);\n this.updateSettings = updateSettingsFactory(ctx, this);\n this.uploadAttachment = uploadAttachmentFactory(ctx, this);\n this.uploadProductPhoto = uploadProductPhotoFactory(ctx, this);\n this.votePoll = votePollFactory(ctx, this);\n\n this.custom = customFactory(ctx, this);\n }\n}\n","import { loginQR, LoginQRCallbackEventType, type LoginQRCallback } from \"./apis/loginQR\";\nimport { getServerInfo, login } from \"./apis/login\";\nimport {\n createContext,\n isContextSession,\n type ContextBase,\n type Options,\n} from \"./context\";\nimport { generateZaloUUID, logger } from \"./utils\";\n\nimport toughCookie from \"tough-cookie\";\n\nimport { ZaloApiError } from \"./Errors/ZaloApiError\";\nimport { checkUpdate } from \"./update\";\nimport { API } from \"./apis\";\n\nexport type Cookie = {\n domain: string;\n expirationDate: number;\n hostOnly: boolean;\n httpOnly: boolean;\n name: string;\n path: string;\n sameSite: string;\n secure: boolean;\n session: boolean;\n storeId: string;\n value: string;\n};\n\nexport type Credentials = {\n imei: string;\n cookie: Cookie[] | toughCookie.SerializedCookie[] | { url: string; cookies: Cookie[] };\n userAgent: string;\n language?: string;\n};\n\nexport class Zalo {\n private enableEncryptParam = true;\n\n constructor(private options: Partial<Options> = {}) {}\n\n private parseCookies(cookie: Credentials[\"cookie\"]): toughCookie.CookieJar {\n const cookieArr = Array.isArray(cookie) ? cookie : cookie.cookies;\n\n cookieArr.forEach((e, i) => {\n if (typeof e.domain == \"string\" && e.domain.startsWith(\".\")) cookieArr[i].domain = e.domain.slice(1);\n });\n\n const jar = new toughCookie.CookieJar();\n for (const each of cookieArr) {\n try {\n jar.setCookieSync(\n toughCookie.Cookie.fromJSON({\n ...each,\n key: (each as toughCookie.SerializedCookie).key || each.name,\n }) ?? \"\",\n \"https://chat.zalo.me\",\n );\n } catch (error: unknown) {\n logger({\n options: {\n logging: this.options.logging,\n },\n }).error(\"Failed to set cookie:\", error);\n }\n }\n return jar;\n }\n\n private validateParams(credentials: Credentials) {\n if (!credentials.imei || !credentials.cookie || !credentials.userAgent) {\n throw new ZaloApiError(\"Missing required params\");\n }\n }\n\n public async login(credentials: Credentials) {\n const ctx = createContext(this.options.apiType, this.options.apiVersion);\n Object.assign(ctx.options, this.options);\n\n return this.loginCookie(ctx, credentials);\n }\n\n private async loginCookie(ctx: ContextBase, credentials: Credentials) {\n await checkUpdate(ctx);\n\n this.validateParams(credentials);\n\n ctx.imei = credentials.imei;\n ctx.cookie = this.parseCookies(credentials.cookie);\n ctx.userAgent = credentials.userAgent;\n ctx.language = credentials.language || \"vi\";\n\n const loginData = await login(ctx, this.enableEncryptParam);\n const serverInfo = await getServerInfo(ctx, this.enableEncryptParam);\n\n const loginInfo = loginData?.data as typeof ctx.loginInfo;\n\n if (!loginData || !loginInfo || !serverInfo) throw new ZaloApiError(\"Đăng nhập thất bại\");\n\n ctx.secretKey = loginInfo.zpw_enk;\n ctx.uid = loginInfo.uid;\n\n // Zalo currently responds with setttings instead of settings\n // they might fix this in the future, so we should have a fallback just in case\n ctx.settings = serverInfo.setttings || serverInfo.settings;\n\n ctx.extraVer = serverInfo.extra_ver;\n ctx.loginInfo = loginInfo;\n\n if (!isContextSession(ctx)) throw new ZaloApiError(\"Khởi tạo ngữ cảnh thất bại.\");\n\n logger(ctx).info(\"Logged in as\", loginInfo.uid);\n\n return new API(ctx, loginInfo.zpw_service_map_v3, loginInfo.zpw_ws);\n }\n\n public async loginQR(\n options?: { userAgent?: string; language?: string; qrPath?: string },\n callback?: LoginQRCallback,\n ) {\n if (!options) options = {};\n if (!options.userAgent)\n options.userAgent = \"Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:133.0) Gecko/20100101 Firefox/133.0\";\n if (!options.language) options.language = \"vi\";\n\n const ctx = createContext(this.options.apiType, this.options.apiVersion);\n Object.assign(ctx.options, this.options);\n\n const loginQRResult = await loginQR(\n ctx,\n options as { userAgent: string; language: string; qrPath?: string },\n callback,\n );\n if (!loginQRResult) throw new ZaloApiError(\"Unable to login with QRCode\");\n\n const imei = generateZaloUUID(options.userAgent);\n\n if (callback) {\n // Thanks to @YanCastle for this great suggestion!\n callback({\n type: LoginQRCallbackEventType.GotLoginInfo,\n data: {\n cookie: loginQRResult.cookies,\n imei,\n userAgent: options.userAgent,\n },\n actions: null,\n });\n }\n\n return this.loginCookie(ctx, {\n cookie: loginQRResult.cookies,\n imei,\n userAgent: options.userAgent,\n language: options.language,\n });\n }\n}\n\nexport { API };\n"]}
|