save
This commit is contained in:
parent
c1d2459d0c
commit
6b27fe6c71
6 changed files with 418 additions and 0 deletions
9
notes/css.org
Normal file
9
notes/css.org
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
:PROPERTIES:
|
||||||
|
:ID: d5bc6532-b50e-4155-bb61-7851649b522e
|
||||||
|
:END:
|
||||||
|
#+title: css
|
||||||
|
#+Author: Yann Esposito
|
||||||
|
#+Date: [2024-07-25]
|
||||||
|
|
||||||
|
- tags ::
|
||||||
|
- source ::
|
179
notes/iroh_auth_pto_knowledge_sharing.org
Normal file
179
notes/iroh_auth_pto_knowledge_sharing.org
Normal file
|
@ -0,0 +1,179 @@
|
||||||
|
:PROPERTIES:
|
||||||
|
:ID: 64f9dd41-188c-47de-867e-fa70a2ee9e18
|
||||||
|
:END:
|
||||||
|
#+title: IROH-Auth PTO knowledge sharing
|
||||||
|
#+Author: Yann Esposito
|
||||||
|
#+Date: [2024-07-29]
|
||||||
|
|
||||||
|
- tags :: [[id:ce893df9-32a4-44e0-9eb5-b9817141ee6a][cisco]]
|
||||||
|
- source ::
|
||||||
|
|
||||||
|
* IROH-Auth Maintenance
|
||||||
|
|
||||||
|
** Daily tasks ; scripts
|
||||||
|
|
||||||
|
1. create a global OAuth2 master client creds
|
||||||
|
2. configure it into a =~/.cisco.sh.gpg= containing
|
||||||
|
|
||||||
|
#+begin_src bash
|
||||||
|
IROH_CLIENT_ID="client-xxxxx"
|
||||||
|
IROH_CLIENT_SECRET="client-xxxxx"
|
||||||
|
IROH_PROVISIONING_CLIENT_ID="client-xxxxx"
|
||||||
|
IROH_PROVISIONING_CLIENT_SECRET="client-xxxxx"
|
||||||
|
#+end_src
|
||||||
|
|
||||||
|
and then
|
||||||
|
|
||||||
|
~gpg -dq ~/.cisco.sh.gpg|source~
|
||||||
|
|
||||||
|
3. Connect to all admin VPN
|
||||||
|
4. Use the scripts; here are the most useful and recently used ones:
|
||||||
|
|
||||||
|
#+begin_src
|
||||||
|
iroh-scripts/
|
||||||
|
├── add-admin-to-org
|
||||||
|
├── add-ai-assistant
|
||||||
|
├── add-flag.sh
|
||||||
|
├── remove-flag.sh
|
||||||
|
├── get-client
|
||||||
|
├── patch-client
|
||||||
|
├── add-scopes-to-client ;; <- takes care of scopes in the org
|
||||||
|
├── add-scopes-to-org
|
||||||
|
├── ai-direct-onboard ;; <- just onboard but do not show; need feature-flag
|
||||||
|
└── client-pass
|
||||||
|
xdr-provisioning/
|
||||||
|
├── add-flag.sh
|
||||||
|
├── add-xdr-flag.sh
|
||||||
|
├── full-reprovision.sh
|
||||||
|
├── re-provision.sh
|
||||||
|
├── sc-provision.sh ;; <- never used for real one of my task to check, not sure I could
|
||||||
|
├── sx-only-provision.sh
|
||||||
|
├── tsv-to-commands.sh
|
||||||
|
└── xdr-provision.sh
|
||||||
|
#+end_src
|
||||||
|
|
||||||
|
*** Recent daily tasks
|
||||||
|
|
||||||
|
- add XDR flag to some QA org
|
||||||
|
- remove XDR flag to some PROD org (from Danny)
|
||||||
|
- patch clients from different sources, mixed with webhooks?
|
||||||
|
|
||||||
|
** Provisioning & Onboardings
|
||||||
|
|
||||||
|
Too many Provisioning APIs
|
||||||
|
|
||||||
|
- SXSO migration ⇒ ~/iroh/provisioning~
|
||||||
|
- PIAM pre-universal ⇒ ~/iroh/provisioning/platform~
|
||||||
|
- PIAM universal (real) ⇒ ~/iroh/external-provisioning~ only PIAM tokens
|
||||||
|
- PIAM universal copy for QA ⇒ ~/iroh/provisioning/universal-provisioning~
|
||||||
|
|
||||||
|
After SX EOL: TWO Provisioners;
|
||||||
|
- PIAM via universal provisioning API and
|
||||||
|
- SE via PIAM pre-universal API.
|
||||||
|
|
||||||
|
*** Onboarding
|
||||||
|
|
||||||
|
- XDR: PIAM Onboarding: CSC, SXO, DI, SCA
|
||||||
|
- SC-UI (sometime called SCM): SE Onboarding: SE, CSC, Orbital, DI
|
||||||
|
|
||||||
|
The onboarding conf is mostly what you would put in the ~clj-http/post~.
|
||||||
|
Recent bugs/weakness:
|
||||||
|
- body template... ⇒ risk to break content-type and/or parsing as json
|
||||||
|
- body passed in the request ⇒ no control on this thing....
|
||||||
|
- Universal Provisioning ⇒ separate but similar onboarding service... THAT'S
|
||||||
|
BAD... PR in progress, probably not able to finish
|
||||||
|
|
||||||
|
*** Current risks/potential bugs
|
||||||
|
|
||||||
|
**** PIAM Universal Provisioning
|
||||||
|
|
||||||
|
Universal Provisioning callback.
|
||||||
|
Flow is:
|
||||||
|
|
||||||
|
1. PIAM -> IROH (provides IROH a /CALLBACK_URL/)
|
||||||
|
2. IROH -> External Onboarding Service
|
||||||
|
3. External Onboarding Service -> IROH: save body in callback-response
|
||||||
|
4. After all onboarding have answered, send response to /CALLBACK_URL/ provided by PIAM
|
||||||
|
|
||||||
|
Wanderson told me, in EU, some does not have any callback url, but PIAM did not
|
||||||
|
have these as error on their side.
|
||||||
|
|
||||||
|
If an error occurs, we should still respond to PIAM otherwise it is an error on
|
||||||
|
their side, even if things went well on ours.
|
||||||
|
There is a cron job, generally just changing the state in the store, will be
|
||||||
|
enough for the cron job to take care of the rest and return the answer to PIAM.
|
||||||
|
There is also an endpoint to trigger the cron manually of course.
|
||||||
|
|
||||||
|
**** SE Provisioning
|
||||||
|
|
||||||
|
We added the onboarding ~orbital~ but SE is sending a specific body via the
|
||||||
|
onboarding API to Orbital. So you cannot use the onboarding for orbital directly.
|
||||||
|
|
||||||
|
SE is mostly alone in dealing with the provisioning.
|
||||||
|
Their client should have all mandatory scopes, but there is a risk they want more.
|
||||||
|
|
||||||
|
|
||||||
|
* SX EOL quickly
|
||||||
|
|
||||||
|
** The flags
|
||||||
|
|
||||||
|
In order to not show the feature-flag mixed with the scopes, there is a new
|
||||||
|
field ~flags~ inside the ~Org~.
|
||||||
|
|
||||||
|
A single flag has some effect: ~sc~.
|
||||||
|
If you have this flag, you cannot use SX and are redirected to SC.
|
||||||
|
After SX EOL, this flag will not have any effect.
|
||||||
|
|
||||||
|
Plan to add a flag with effect with ~sx~ so QA could still use SX in TEST for 1
|
||||||
|
year after SX EOL.
|
||||||
|
|
||||||
|
|
||||||
|
*** Managing the flags
|
||||||
|
|
||||||
|
https://stunning-barnacle-e4478e20.pages.github.io/admin-ui/
|
||||||
|
|
||||||
|
Use FF-UI or the scripts
|
||||||
|
|
||||||
|
Note the scopes required to add/remove the flag.
|
||||||
|
Changed, with should be given to TAC, to should not be given to TAC.
|
||||||
|
The APIs are hidden under the provisioning APIs both for: ~flags~ and ~feature-flag-scopes~.
|
||||||
|
|
||||||
|
If possible let's deprecate ~feature-flag-scopes~ even if probably the xdr
|
||||||
|
feature-flag will be there forever.
|
||||||
|
|
||||||
|
** Redirections
|
||||||
|
|
||||||
|
There are new dynamically built fields ~apps~ and ~main-app~.
|
||||||
|
|
||||||
|
- ~apps~ the application the user can use
|
||||||
|
- ~main-app~ the application the user should default to when we have different choices.
|
||||||
|
|
||||||
|
There is a new ~apps~ section in the ~config~ to know which URL we can use for apps.
|
||||||
|
|
||||||
|
#+begin_src clojure
|
||||||
|
{:global
|
||||||
|
{:apps
|
||||||
|
{:sc
|
||||||
|
{:module-type-ids-allow-list
|
||||||
|
;; would be better with aliases in the config, now with aero we can do it
|
||||||
|
#{"03d8591b-8374-5666-8fcc-eaea9188193c"
|
||||||
|
"b6a282ad-be30-4382-b27f-7346320e3b84"
|
||||||
|
"b7f21c6b-701a-4b45-8a3d-449001844efe"
|
||||||
|
"b95d5cd0-5bcb-45f6-921c-e2777468f6b0"}
|
||||||
|
:url "https://secure-client.us.security.cisco.com"}
|
||||||
|
:sx
|
||||||
|
{:module-type-ids-allow-list :all,
|
||||||
|
:url "https://securex.us.security.cisco.com"}
|
||||||
|
:xdr
|
||||||
|
{:module-type-ids-allow-list :all,
|
||||||
|
:url "https://xdr.us.security.cisco.com"}}
|
||||||
|
}
|
||||||
|
#+end_src
|
||||||
|
|
||||||
|
This is used by both the UI and the backend to decide where to redirect users.
|
||||||
|
The rules are a bit complex, but we try our best to prevent a redirect hop via a
|
||||||
|
UI if we have enough details.
|
||||||
|
|
||||||
|
** Change SX EOL API
|
||||||
|
|
||||||
|
https://iroh-adm.test.iroh.site/admin/maintenance/index.html#/ReleaseBehaviorManagement/put_admin_maintenance_release_behaviors__deadline_id_
|
85
notes/journal/2024/2024-07-04.org
Normal file
85
notes/journal/2024/2024-07-04.org
Normal file
|
@ -0,0 +1,85 @@
|
||||||
|
#+Title: Journal (2024-07-04 - ∆y=47.33 (17288))
|
||||||
|
#+Author: Yann Esposito
|
||||||
|
#+Date: [2024-07-04]
|
||||||
|
#+LANG: fr
|
||||||
|
|
||||||
|
* Résume Journée
|
||||||
|
:PROPERTIES:
|
||||||
|
:VISIBILITY: content
|
||||||
|
:CREATED: 20240704
|
||||||
|
:END:
|
||||||
|
|
||||||
|
** Matin
|
||||||
|
:PROPERTIES:
|
||||||
|
:VISIBILITY: content
|
||||||
|
:CREATED: 20240704
|
||||||
|
:END:
|
||||||
|
|
||||||
|
| Pression au travail ? | 3/5 |
|
||||||
|
| Motivé de commencer la journée ? | 1/5 |
|
||||||
|
| Est-ce que je me sens plein d'énergie ? | 3/5 |
|
||||||
|
| Est-ce que je me sens concentré et préparé ? | 4/5 |
|
||||||
|
|
||||||
|
- Que dois-je faire en dehors du travail ?
|
||||||
|
|
||||||
|
** Soirée
|
||||||
|
:PROPERTIES:
|
||||||
|
:CREATED: 20240704
|
||||||
|
:END:
|
||||||
|
| activité φ | ?/5 | au lit -> sport |
|
||||||
|
| nourriture | ?/5 | mal-bouffe -> saine |
|
||||||
|
| humeur | ?/5 | exécrable -> excellente |
|
||||||
|
| énergie | ?/5 | exécrable -> excellente |
|
||||||
|
| intérêt | ?/5 | ennuie -> exceptionnel |
|
||||||
|
* 2024-07-04 Thursday
|
||||||
|
** 13:35 Hello!
|
||||||
|
|
||||||
|
Ça faisait un long moment que je n'avais pas utilisé le journal d'org-mode.
|
||||||
|
C'est simple, nous sommes le 4 juillet et c'est ma première entrée de l'année.
|
||||||
|
J'ai pas mal déplacer mes écrit vers org-roam sur des sujets précis.
|
||||||
|
Mais je me suis aperçu que je n'avais pas les idées assez claires et stables
|
||||||
|
pour pouvoir vraiment écrire précisement sur certains sujets.
|
||||||
|
Aussi le journal semble un bon endroit pour éclaircir ses idées sans pour
|
||||||
|
objectif de les publier ouvertement à tous.
|
||||||
|
Mais plus comme des notes personnelles.
|
||||||
|
|
||||||
|
*** Leçons acquises en programmation
|
||||||
|
|
||||||
|
Bon j'ai une sorte de tout un tas de connaissances acquises par l'expérience et
|
||||||
|
je constate en regardant le travail de mes pairs que ce que je considère comme
|
||||||
|
des connaissances communes ne le sont pas.
|
||||||
|
Je pense que j'ai eu cette impression trop longtemps parce que je travaille avec
|
||||||
|
des gens qui partagent une grosse partie de mes goûts et mes préférences dans ce
|
||||||
|
métier.
|
||||||
|
|
||||||
|
Tout d'abord, il faut être clair, aujourd'hui, je ne pense pas que la création
|
||||||
|
de programme informatique relève de l'ingénierie. Cela reste, même dans les
|
||||||
|
grosses structure, plus de l'artisanat que de l'ingénierie.
|
||||||
|
|
||||||
|
C'est-à-dire qu'il n'existe pas, ou disons, très peu, de lois et de règles que
|
||||||
|
tout le monde doit suivre dans ce métier.
|
||||||
|
Il y a pourtant certains principes qui en font la spécificité.
|
||||||
|
|
||||||
|
Il a été prouvé que la partie la plus importante pour qu'un projet informatique
|
||||||
|
soit un succès (attention ce n'est pas très formel) est la bonne gestion de
|
||||||
|
la complexité.
|
||||||
|
C'est une évidence pour n'importe quel programmeur avec de l'expérience.
|
||||||
|
La grande difficulté par contre et de mettre le doit sur quel type de
|
||||||
|
complexité.
|
||||||
|
Il y a en effet plusieurs façons d'être complexe.
|
||||||
|
Il y a une complexité inhérente au système que nous devons fabriquer.
|
||||||
|
C'est-à-dire, une complexité, impossible à réduire parce qu'elle fait partie du
|
||||||
|
problème à résoudre.
|
||||||
|
Et il y a tout un tas d'autres complexités qui viennent se greffer à cette
|
||||||
|
complexité du problème.
|
||||||
|
Et c'est souvent là que ce situe le gros des problèmes des projets.
|
||||||
|
Il faut ajouter à ça, que dans le monde moderne, le problème change avec le
|
||||||
|
temps pendant la construction de la solution.
|
||||||
|
Il faut donc non seulement produire une solution au problème demandé, mais en
|
||||||
|
plus avoir une solution adaptable a des changements non connu à l'avance du
|
||||||
|
problème.
|
||||||
|
|
||||||
|
Il est donc important de garder à l'esprit des tonnes de contraintes techniques
|
||||||
|
et humaines lors de l'élaboration et la création d'un programme informatique.
|
||||||
|
|
||||||
|
...
|
51
notes/journal/2024/2024-08-12.org
Normal file
51
notes/journal/2024/2024-08-12.org
Normal file
|
@ -0,0 +1,51 @@
|
||||||
|
#+Title: Journal (2024-08-13 - ∆y=47.44 (17328))
|
||||||
|
#+Author: Yann Esposito
|
||||||
|
#+Date: [2024-08-13]
|
||||||
|
#+LANG: fr
|
||||||
|
|
||||||
|
* Résume Journée
|
||||||
|
:PROPERTIES:
|
||||||
|
:VISIBILITY: content
|
||||||
|
:CREATED: 20240813
|
||||||
|
:END:
|
||||||
|
|
||||||
|
** Matin
|
||||||
|
:PROPERTIES:
|
||||||
|
:VISIBILITY: content
|
||||||
|
:CREATED: 20240813
|
||||||
|
:END:
|
||||||
|
|
||||||
|
| Pression au travail ? | ?/5 |
|
||||||
|
| Motivé de commencer la journée ? | ?/5 |
|
||||||
|
| Est-ce que je me sens plein d'énergie ? | ?/5 |
|
||||||
|
| Est-ce que je me sens concentré et préparé ? | ?/5 |
|
||||||
|
|
||||||
|
- Que dois-je faire en dehors du travail ?
|
||||||
|
|
||||||
|
** Soirée
|
||||||
|
:PROPERTIES:
|
||||||
|
:CREATED: 20240813
|
||||||
|
:END:
|
||||||
|
| activité φ | ?/5 | au lit -> sport |
|
||||||
|
| nourriture | ?/5 | mal-bouffe -> saine |
|
||||||
|
| humeur | ?/5 | exécrable -> excellente |
|
||||||
|
| énergie | ?/5 | exécrable -> excellente |
|
||||||
|
| intérêt | ?/5 | ennuie -> exceptionnel |
|
||||||
|
* 2024-08-12 Monday
|
||||||
|
** 00:01 10k days
|
||||||
|
|
||||||
|
10k jours, c'est environ 27 ans et demi.
|
||||||
|
C'est à peu près le temps qu'il me reste à vivre.
|
||||||
|
|
||||||
|
Sachant que pour devenir un professionnel, on considère qu'il faut environ 10k
|
||||||
|
heures sur un sujet. Cela signifie qu'à force de 1h par jour sur un sujet
|
||||||
|
spécifique je pourrais devenir un spécialiste de ce nouveau sujet.
|
||||||
|
|
||||||
|
Étant donné le temps obligatoire à passer sur tous les autres sujets de la vie.
|
||||||
|
Il serait difficile d'imaginer pouvoir maîtriser plus que deux ou trois autres disciplines.
|
||||||
|
|
||||||
|
Il semblerait qu'en fonction des critères qui me concernent, la probabilité
|
||||||
|
qu'il me reste au moins 10k jours à vivre soit d'environ 71%.
|
||||||
|
|
||||||
|
Je pense donc qu'il est peut-être temps pour moi de me trouver des objectifs et
|
||||||
|
d'arriver à avancer vers cet objectif sachant que mon temps est compté.
|
36
notes/journal/2024/2024-08-13.org
Normal file
36
notes/journal/2024/2024-08-13.org
Normal file
|
@ -0,0 +1,36 @@
|
||||||
|
#+Title: Journal (2024-08-13 - 9999 - ∆y=47.44 (17328))
|
||||||
|
#+Author: Yann Esposito
|
||||||
|
#+Date: [2024-08-13]
|
||||||
|
#+LANG: fr
|
||||||
|
* 2024-08-13 Tuesday
|
||||||
|
** 07:54
|
||||||
|
J'ai modifié mon template de journal.
|
||||||
|
Je n'ai jamais réussi à me tenir sur les notes, faire des stats, etc…
|
||||||
|
|
||||||
|
Je pourrais seulement y arriver si tout était plus automatique.
|
||||||
|
|
||||||
|
Maintenant on voit une valeur pour le 10k days.
|
||||||
|
|
||||||
|
Bon, je suis en vacances, je ne vais pas trop investir d'énergie pour l'instant.
|
||||||
|
Mais un des premier objectifs sera de trouver un objectifs pour ces 10k days.
|
||||||
|
|
||||||
|
** 10:36 Transactional relationships
|
||||||
|
|
||||||
|
J'ai lu il y a peu un commentaire qui explique la différence dans les rapports
|
||||||
|
humains récents.
|
||||||
|
Une personne expliquait le nombre croissant de rapports simplement
|
||||||
|
transactionnels entre les individus.
|
||||||
|
On ne connait plus rien de la vie des gens avec qui nous interagissons.
|
||||||
|
On ne demande pas sa vie à un livreur Amazon, ou Uber.
|
||||||
|
Parce que notre contact est trop court pour investir du temps dans ces
|
||||||
|
discussions la plupart du temps.
|
||||||
|
Alors que précédemment les personnes avaient le temps de communiquer entre
|
||||||
|
elles, de prendre des nouvelles de leur famille, de leur vie, de leurs émotions.
|
||||||
|
|
||||||
|
Il s'agit d'une manifestation parmi tant d'autre de la destruction de lien
|
||||||
|
social.
|
||||||
|
La première fois que j'ai été exposé à cette idée est assez récente en voyant
|
||||||
|
un petit exposé de Rolland Gorri. Et le voir lors d'une diffusion d'un
|
||||||
|
documentaire au cinéma de Martigues.
|
||||||
|
En cherchant son nom, on voit qu'il participe à une association dont le role est
|
||||||
|
de re-privilégier le lien social et lutter contre tout ce qui le détruit.
|
58
notes/journal/2024/2024-08-14.org
Normal file
58
notes/journal/2024/2024-08-14.org
Normal file
|
@ -0,0 +1,58 @@
|
||||||
|
#+Title: Journal (2024-08-14 - 9998 - ∆y=47.44 (17329))
|
||||||
|
#+Author: Yann Esposito
|
||||||
|
#+Date: [2024-08-14]
|
||||||
|
#+LANG: fr
|
||||||
|
* 2024-08-14 Wednesday
|
||||||
|
** 08:56 Espérance de vie résiduelle
|
||||||
|
|
||||||
|
Je viens de penser à cette notion des dix milles jours qui me reste pour être
|
||||||
|
productif. Mais pour bien vérifier que ces 10k jours semblent réalistes, je suis
|
||||||
|
tout de même allé me renseigner sur cette notion d'espérance de vie résiduelle.
|
||||||
|
|
||||||
|
A mon âge, il me reste environ 40.7 ans d'espérance de vie résiduelle.
|
||||||
|
Soit le tableau suivant:
|
||||||
|
|
||||||
|
| Âge | Taux de survie |
|
||||||
|
|---------+----------------|
|
||||||
|
| 50 ans | 99.528 % |
|
||||||
|
| 55 ans | 98.243 % |
|
||||||
|
| 60 ans | 96.442 % |
|
||||||
|
| 65 ans | 94.052 % |
|
||||||
|
| 70 ans | 90.792 % |
|
||||||
|
| 75 ans | 85.952 % |
|
||||||
|
| 80 ans | 78.009 % |
|
||||||
|
| 85 ans | 64.082 % |
|
||||||
|
| 90 ans | 42.413 % |
|
||||||
|
| 95 ans | 18.590 % |
|
||||||
|
| 100 ans | 4.211 % |
|
||||||
|
|
||||||
|
Dans 10k jours, j'aurai 74.81 ans. Donc j'ai un probabilité de survie d'environ 86%
|
||||||
|
ce qui bien que loin d'être certain permet de faire un paris pas trop risqué sur
|
||||||
|
le fait d'y arriver.
|
||||||
|
|
||||||
|
Il faut tout de même rajouter qu'il s'agit aussi lors de ces 10k days d'avoir
|
||||||
|
une activité. Il convient donc de s'informer sur l'espérance de vie sans
|
||||||
|
incapacité ou incapacité sévère.
|
||||||
|
En France aujourd'hui, l'espérance de vie sans incapacité d'un homme de 65 ans
|
||||||
|
est de 10.4 ans, et 15.7 ans sans incapacité sévère.
|
||||||
|
Ce qui rentre dans les clous des 75 ans que je vise.
|
||||||
|
|
||||||
|
Il a donc été assez chanceux que je pense à ces 10k jours récemment parce qu'on
|
||||||
|
est assez proche du max à mon âge.
|
||||||
|
|
||||||
|
Bien, il me reste donc 9998j. Et jusqu'ici, je ne sais même pas ce que je vais
|
||||||
|
faire de ces 10k jours. Je sais juste que c'est le temps qu'il reste et qu'il
|
||||||
|
faut qu'une partie de ce temps soit utilisé pour faire des choix sur quoi faire.
|
||||||
|
|
||||||
|
** 09:54 Thèmes pour les 10k
|
||||||
|
|
||||||
|
Il serait temps que j'essaye d'établir une liste de thèmes qui pourraient m'intéresser.
|
||||||
|
Récemment un nouveau thème intéressant est du au effets positifs des rapports
|
||||||
|
de domination. Pourquoi ils sont essentiels.
|
||||||
|
|
||||||
|
Un autre dans mon domaine est peut-être produire un langage de programmation
|
||||||
|
encore plus pragmatique qui enlève des features inutiles mais aussi met au
|
||||||
|
centre du langage des features d'organisation de programmes.
|
||||||
|
En particulier, un système de gestion de services, de contexte en premier
|
||||||
|
argument des fonctions.
|
||||||
|
Un sorte de "Flow Oriented programming"
|
Loading…
Reference in a new issue