npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

decentravault

v0.1.3

Published

Encrypted decentralized file storage — one API key, zero complexity, maximum security.

Readme

��<�d�i�v� �a�l�i�g�n�=�"�c�e�n�t�e�r�"�>� � � � �#� �=�� �D�e�c�e�n�t�r�a�V�a�u�l�t� �S�D�K� � � � ��E�n�c�r�y�p�t�e�d� �d�e�c�e�n�t�r�a�l�i�z�e�d� �f�i�l�e� �s�t�o�r�a�g�e� � �o�n�e� �A�P�I� �k�e�y�,� �z�e�r�o� �c�o�m�p�l�e�x�i�t�y�,� �m�a�x�i�m�u�m� �s�e�c�u�r�i�t�y�.�� � � � �[�!�[�n�p�m� �v�e�r�s�i�o�n�]�(�h�t�t�p�s�:�/�/�i�m�g�.�s�h�i�e�l�d�s�.�i�o�/�n�p�m�/�v�/�d�e�c�e�n�t�r�a�v�a�u�l�t�?�s�t�y�l�e�=�f�l�a�t�-�s�q�u�a�r�e�&�c�o�l�o�r�=�b�l�u�e�)�]�(�h�t�t�p�s�:�/�/�w�w�w�.�n�p�m�j�s�.�c�o�m�/�p�a�c�k�a�g�e�/�d�e�c�e�n�t�r�a�v�a�u�l�t�)� � �[�!�[�n�p�m� �d�o�w�n�l�o�a�d�s�]�(�h�t�t�p�s�:�/�/�i�m�g�.�s�h�i�e�l�d�s�.�i�o�/�n�p�m�/�d�m�/�d�e�c�e�n�t�r�a�v�a�u�l�t�?�s�t�y�l�e�=�f�l�a�t�-�s�q�u�a�r�e�&�c�o�l�o�r�=�g�r�e�e�n�)�]�(�h�t�t�p�s�:�/�/�w�w�w�.�n�p�m�j�s�.�c�o�m�/�p�a�c�k�a�g�e�/�d�e�c�e�n�t�r�a�v�a�u�l�t�)� � �[�!�[�b�u�n�d�l�e� �s�i�z�e�]�(�h�t�t�p�s�:�/�/�i�m�g�.�s�h�i�e�l�d�s�.�i�o�/�b�u�n�d�l�e�p�h�o�b�i�a�/�m�i�n�z�i�p�/�d�e�c�e�n�t�r�a�v�a�u�l�t�?�s�t�y�l�e�=�f�l�a�t�-�s�q�u�a�r�e�&�c�o�l�o�r�=�o�r�a�n�g�e�)�]�(�h�t�t�p�s�:�/�/�b�u�n�d�l�e�p�h�o�b�i�a�.�c�o�m�/�p�a�c�k�a�g�e�/�d�e�c�e�n�t�r�a�v�a�u�l�t�)� � �[�!�[�T�y�p�e�S�c�r�i�p�t�]�(�h�t�t�p�s�:�/�/�i�m�g�.�s�h�i�e�l�d�s�.�i�o�/�b�a�d�g�e�/�T�y�p�e�S�c�r�i�p�t�-�r�e�a�d�y�-�3�1�7�8�c�6�?�s�t�y�l�e�=�f�l�a�t�-�s�q�u�a�r�e�)�]�(�h�t�t�p�s�:�/�/�w�w�w�.�t�y�p�e�s�c�r�i�p�t�l�a�n�g�.�o�r�g�)� � �[�!�[�l�i�c�e�n�s�e�]�(�h�t�t�p�s�:�/�/�i�m�g�.�s�h�i�e�l�d�s�.�i�o�/�n�p�m�/�l�/�d�e�c�e�n�t�r�a�v�a�u�l�t�?�s�t�y�l�e�=�f�l�a�t�-�s�q�u�a�r�e�)�]�(�L�I�C�E�N�S�E�)� � � � �<�/�d�i�v�>� � � � �-�-�-� � � � �#�#� �W�h�a�t� �i�s� �D�e�c�e�n�t�r�a�V�a�u�l�t�?� � � � �D�e�c�e�n�t�r�a�V�a�u�l�t� �g�i�v�e�s� �y�o�u�r� �a�p�p� ��b�a�n�k�-�g�r�a�d�e� �f�i�l�e� �s�e�c�u�r�i�t�y� �i�n� �t�h�r�e�e� �l�i�n�e�s� �o�f� �c�o�d�e��.� �N�o� �c�r�y�p�t�o�g�r�a�p�h�y� �e�x�p�e�r�t�i�s�e� �r�e�q�u�i�r�e�d�.� �N�o� �b�l�o�c�k�c�h�a�i�n� �k�n�o�w�l�e�d�g�e� �n�e�e�d�e�d�.� �J�u�s�t� �u�p�l�o�a�d� �a�n�d� �r�e�t�r�i�e�v�e�.� � � � ��t�y�p�e�s�c�r�i�p�t� � �c�o�n�s�t� �v�a�u�l�t� �=� �n�e�w� �D�e�c�e�n�t�r�a�V�a�u�l�t�(�'�d�v�_�y�o�u�r�_�a�p�i�_�k�e�y�'�)�;� � � � �c�o�n�s�t� �{� �f�i�l�e�I�d� �}� �=� �a�w�a�i�t� �v�a�u�l�t�.�u�p�l�o�a�d�(�f�i�l�e�,� �'�c�o�n�t�r�a�c�t�.�p�d�f�'�,� �'�a�p�p�l�i�c�a�t�i�o�n�/�p�d�f�'�)�;� � �c�o�n�s�t� �{� �f�i�l�e�:� �d�e�c�r�y�p�t�e�d� �}� �=� �a�w�a�i�t� �v�a�u�l�t�.�r�e�t�r�i�e�v�e�(�f�i�l�e�I�d�)�;� � �� � � � �E�v�e�r�y� �f�i�l�e� �y�o�u� �u�p�l�o�a�d� �i�s� �a�u�t�o�m�a�t�i�c�a�l�l�y�:� � � � �|� �W�h�a�t� �|� �H�o�w� �|� � �|�-�-�-�|�-�-�-�|� � �|� �=�� ��E�n�c�r�y�p�t�e�d�� �|� �A�E�S�-�2�5�6�-�G�C�M� �b�e�f�o�r�e� �i�t� �l�e�a�v�e�s� �y�o�u�r� �d�e�v�i�c�e� �|� � �|� �<�� ��D�i�s�t�r�i�b�u�t�e�d�� �|� �S�t�o�r�e�d� �o�n� �I�P�F�S� � �n�o� �s�i�n�g�l�e� �p�o�i�n�t� �o�f� �f�a�i�l�u�r�e� �|� � �|� ��&� ��A�n�c�h�o�r�e�d�� �|� �S�H�A�-�2�5�6� �h�a�s�h� �r�e�c�o�r�d�e�d� �o�n� �t�h�e� �P�o�l�y�g�o�n� �b�l�o�c�k�c�h�a�i�n� �|� � �|� �=�u�� ��Z�e�r�o�-�k�n�o�w�l�e�d�g�e�� �|� �S�e�r�v�e�r�s� �s�e�e� �o�n�l�y� �c�i�p�h�e�r�t�e�x�t� � �n�e�v�e�r� �y�o�u�r� �p�l�a�i�n�t�e�x�t� �|� � � � �-�-�-� � � � �#�#� �T�a�b�l�e� �o�f� �C�o�n�t�e�n�t�s� � � � �-� �[�I�n�s�t�a�l�l�a�t�i�o�n�]�(�#�i�n�s�t�a�l�l�a�t�i�o�n�)� � �-� �[�G�e�t� �a�n� �A�P�I� �K�e�y�]�(�#�g�e�t�-�a�n�-�a�p�i�-�k�e�y�)� � �-� �[�Q�u�i�c�k� �S�t�a�r�t�]�(�#�q�u�i�c�k�-�s�t�a�r�t�)� � �-� �[�H�o�w� �I�t� �W�o�r�k�s�]�(�#�h�o�w�-�i�t�-�w�o�r�k�s�)� � �-� �[�A�P�I� �R�e�f�e�r�e�n�c�e�]�(�#�a�p�i�-�r�e�f�e�r�e�n�c�e�)� � � � �-� �[�C�o�n�s�t�r�u�c�t�o�r�]�(�#�n�e�w�-�d�e�c�e�n�t�r�a�v�a�u�l�t�a�p�i�k�e�y�-�o�p�t�i�o�n�s�)� � � � �-� �[�u�p�l�o�a�d�]�(�#�v�a�u�l�t�u�p�l�o�a�d�f�i�l�e�-�f�i�l�e�n�a�m�e�-�m�i�m�e�t�y�p�e�)� � � � �-� �[�r�e�t�r�i�e�v�e�]�(�#�v�a�u�l�t�r�e�t�r�i�e�v�e�f�i�l�e�i�d�)� � � � �-� �[�v�e�r�i�f�y�]�(�#�v�a�u�l�t�v�e�r�i�f�y�f�i�l�e�i�d�)� � � � �-� �[�l�i�s�t�]�(�#�v�a�u�l�t�l�i�s�t�)� � � � �-� �[�d�e�l�e�t�e�]�(�#�v�a�u�l�t�d�e�l�e�t�e�f�i�l�e�i�d�)� � � � �-� �[�w�a�i�t�F�o�r�B�l�o�c�k�c�h�a�i�n�]�(�#�v�a�u�l�t�w�a�i�t�f�o�r�b�l�o�c�k�c�h�a�i�n�f�i�l�e�i�d�-�t�i�m�e�o�u�t�m�s�)� � �-� �[�T�y�p�e�S�c�r�i�p�t� �T�y�p�e�s�]�(�#�t�y�p�e�s�c�r�i�p�t�-�t�y�p�e�s�)� � �-� �[�F�r�a�m�e�w�o�r�k� �E�x�a�m�p�l�e�s�]�(�#�f�r�a�m�e�w�o�r�k�-�e�x�a�m�p�l�e�s�)� � �-� �[�E�r�r�o�r� �H�a�n�d�l�i�n�g�]�(�#�e�r�r�o�r�-�h�a�n�d�l�i�n�g�)� � �-� �[�E�n�v�i�r�o�n�m�e�n�t� �V�a�r�i�a�b�l�e�s�]�(�#�e�n�v�i�r�o�n�m�e�n�t�-�v�a�r�i�a�b�l�e�s�)� � �-� �[�S�e�c�u�r�i�t�y� �M�o�d�e�l�]�(�#�s�e�c�u�r�i�t�y�-�m�o�d�e�l�)� � �-� �[�R�e�q�u�i�r�e�m�e�n�t�s�]�(�#�r�e�q�u�i�r�e�m�e�n�t�s�)� � � � �-�-�-� � � � �#�#� �I�n�s�t�a�l�l�a�t�i�o�n� � � � ��b�a�s�h� � �n�p�m� �i�n�s�t�a�l�l� �d�e�c�e�n�t�r�a�v�a�u�l�t� � �#� �o�r� � �y�a�r�n� �a�d�d� �d�e�c�e�n�t�r�a�v�a�u�l�t� � �#� �o�r� � �p�n�p�m� �a�d�d� �d�e�c�e�n�t�r�a�v�a�u�l�t� � �� � � � �>� ��Z�e�r�o� �d�e�p�e�n�d�e�n�c�i�e�s�.�� �U�s�e�s� �t�h�e� �n�a�t�i�v�e� ��f�e�t�c�h�� �a�n�d� ��c�r�y�p�t�o�.�s�u�b�t�l�e�� �A�P�I�s� �b�u�i�l�t� �i�n�t�o� �N�o�d�e�.�j�s� �1�8�+� �a�n�d� �a�l�l� �m�o�d�e�r�n� �b�r�o�w�s�e�r�s�.� � � � �-�-�-� � � � �#�#� �G�e�t� �a�n� �A�P�I� �K�e�y� � � � �1�.� �S�i�g�n� �u�p� �a�t� �[�d�e�c�e�n�t�r�a�v�a�u�l�t�.�c�o�m�]�(�h�t�t�p�s�:�/�/�d�e�c�e�n�t�r�a�v�a�u�l�t�.�c�o�m�)� � �2�.� �G�o� �t�o� ��D�a�s�h�b�o�a�r�d� ��! �A�P�I� �K�e�y�s� ��! �G�e�n�e�r�a�t�e� �K�e�y�� � �3�.� �C�o�p�y� �y�o�u�r� ��d�v�_�.�.�.�� �k�e�y� � �i�t�'�s� �s�h�o�w�n� ��o�n�l�y� �o�n�c�e�� � � � �-�-�-� � � � �#�#� �Q�u�i�c�k� �S�t�a�r�t� � � � �#�#�#� �U�p�l�o�a�d� �a� �f�i�l�e� � � � ��t�y�p�e�s�c�r�i�p�t� � �i�m�p�o�r�t� �{� �D�e�c�e�n�t�r�a�V�a�u�l�t� �}� �f�r�o�m� �'�d�e�c�e�n�t�r�a�v�a�u�l�t�'�;� � � � �c�o�n�s�t� �v�a�u�l�t� �=� �n�e�w� �D�e�c�e�n�t�r�a�V�a�u�l�t�(�p�r�o�c�e�s�s�.�e�n�v�.�D�V�_�A�P�I�_�K�E�Y�!�)�;� � � � �c�o�n�s�t� �f�i�l�e� �=� �n�e�w� �B�l�o�b�(�[�'�H�e�l�l�o�,� �W�o�r�l�d�!�'�]�,� �{� �t�y�p�e�:� �'�t�e�x�t�/�p�l�a�i�n�'� �}�)�;� � �c�o�n�s�t� �{� �f�i�l�e�I�d�,� �b�l�o�c�k�c�h�a�i�n�S�t�a�t�u�s� �}� �=� �a�w�a�i�t� �v�a�u�l�t�.�u�p�l�o�a�d�(�f�i�l�e�,� �'�h�e�l�l�o�.�t�x�t�'�,� �'�t�e�x�t�/�p�l�a�i�n�'�)�;� � � � �c�o�n�s�o�l�e�.�l�o�g�(�'�F�i�l�e� �I�D�:�'�,� �f�i�l�e�I�d�)�;� � �/�/� ��! �"�6�d�7�0�b�7�6�2�-�.�.�.�"� � � � �c�o�n�s�o�l�e�.�l�o�g�(�'�B�l�o�c�k�c�h�a�i�n�:�'�,� �b�l�o�c�k�c�h�a�i�n�S�t�a�t�u�s�)�;� � �/�/� ��! �"�p�e�n�d�i�n�g�"� � �(�c�o�n�f�i�r�m�e�d� �i�n� �~�1�5� �s�e�c�o�n�d�s� �i�n� �t�h�e� �b�a�c�k�g�r�o�u�n�d�)� � �� � � � �#�#�#� �R�e�t�r�i�e�v�e� �a�n�d� �d�e�c�r�y�p�t� �a� �f�i�l�e� � � � ��t�y�p�e�s�c�r�i�p�t� � �c�o�n�s�t� �{� �f�i�l�e�,� �n�a�m�e�,� �m�i�m�e�T�y�p�e�,� �i�n�t�e�g�r�i�t�y�,� �b�l�o�c�k�c�h�a�i�n� �}� �=� �a�w�a�i�t� �v�a�u�l�t�.�r�e�t�r�i�e�v�e�(�f�i�l�e�I�d�)�;� � � � �c�o�n�s�o�l�e�.�l�o�g�(�'�I�n�t�e�g�r�i�t�y�:�'�,� �i�n�t�e�g�r�i�t�y�)�;� � �/�/� ��! �"�o�k�"� � � � �c�o�n�s�o�l�e�.�l�o�g�(�'�B�l�o�c�k�c�h�a�i�n� �v�e�r�i�f�i�e�d�:�'�,� �b�l�o�c�k�c�h�a�i�n�.�v�e�r�i�f�i�e�d�)�;� � �/�/� ��! �t�r�u�e� � � � �/�/� �S�a�v�e� �t�o� �d�i�s�k� �(�N�o�d�e�.�j�s�)� � �i�m�p�o�r�t� �{� �w�r�i�t�e�F�i�l�e�S�y�n�c� �}� �f�r�o�m� �'�f�s�'�;� � �w�r�i�t�e�F�i�l�e�S�y�n�c�(�n�a�m�e�,� �f�i�l�e�)�;� � �� � � � �#�#�#� �V�e�r�i�f�y� �w�i�t�h�o�u�t� �d�o�w�n�l�o�a�d�i�n�g� � � � ��t�y�p�e�s�c�r�i�p�t� � �c�o�n�s�t� �{� �v�e�r�i�f�i�e�d�,� �r�e�a�s�o�n�,� �b�l�o�c�k�c�h�a�i�n�T�x� �}� �=� �a�w�a�i�t� �v�a�u�l�t�.�v�e�r�i�f�y�(�f�i�l�e�I�d�)�;� � � � �c�o�n�s�o�l�e�.�l�o�g�(�v�e�r�i�f�i�e�d� �?� �'�' �U�n�t�a�m�p�e�r�e�d�'� �:� �'�L' �T�a�m�p�e�r�e�d�'�)�;� � �c�o�n�s�o�l�e�.�l�o�g�(��h�t�t�p�s�:�/�/�a�m�o�y�.�p�o�l�y�g�o�n�s�c�a�n�.�c�o�m�/�t�x�/�$�{�b�l�o�c�k�c�h�a�i�n�T�x�}��)�;� � �� � � � �-�-�-� � � � �#�#� �H�o�w� �I�t� �W�o�r�k�s� � � � �� � � � �Y�o�u�r� �A�p�p� � � � � � � � � � � � � � � � �D�e�c�e�n�t�r�a�V�a�u�l�t� �S�e�r�v�e�r� � � � � � � � � � � � � � �B�l�o�c�k�c�h�a�i�n� �+� �I�P�F�S� � � � ��%�%�%�%�%�%�%�%�% � � � � � � � � � � � � � � ��%�%�%�%�%�%�%�%�%�%�%�%�%�%�%�%�%�%�%�% � � � � � � � � � � � � � ��%�%�%�%�%�%�%�%�%�%�%�%�%�%�%�%�% � � � � � � � �[�F�i�l�e�]� � � � � � � �% � � � � � � ��% � � � �A�E�S�-�2�5�6�-�G�C�M� ��%�%�%�%�%�%�%�%�%�%�%�%�%�%�%�%�%�%�%�%�%�%�%�%�%�%�%�%�%�%�%�%�%�%�%�%�%�%�%�%�%�%�% �[�E�n�c�r�y�p�t�e�d� �B�y�t�e�s�]� � � � �e�n�c�r�y�p�t� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �% � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �%�%�%�% �I�P�F�S� �(�P�i�n�a�t�a�)� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �% � � � �R�e�t�u�r�n�s� �C�I�D� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �% � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �%�%�%�% �S�H�A�-�2�5�6� �H�a�s�h� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �% � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � ��% � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �P�o�l�y�g�o�n� �B�l�o�c�k�c�h�a�i�n� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �(�T�X� �d�a�t�a� �f�i�e�l�d�)� � � � � � �R�E�T�R�I�E�V�E�:� � � � ��%�%�%�%�%�%�%�%�% � � � �[�f�i�l�e�I�d�]� ��%�%�% �S�e�r�v�e�r� �f�e�t�c�h�e�s� �f�r�o�m� �I�P�F�S� ��%�%�% �R�e�-�h�a�s�h� �&� �v�e�r�i�f�y� ��%�%�% �R�e�t�u�r�n� �e�n�c�r�y�p�t�e�d� �b�y�t�e�s� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �% � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � ��% � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �S�D�K� �d�e�c�r�y�p�t�s� �l�o�c�a�l�l�y� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �(�s�e�r�v�e�r� �n�e�v�e�r� �s�e�e�s� �p�l�a�i�n�t�e�x�t�)� � �� � � � �T�h�e� �d�e�c�r�y�p�t�i�o�n� ��a�l�w�a�y�s� �h�a�p�p�e�n�s� �i�n�s�i�d�e� �t�h�e� �S�D�K�� �o�n� �t�h�e� �u�s�e�r�'�s� �m�a�c�h�i�n�e� � �n�o�t� �o�n� �t�h�e� �s�e�r�v�e�r�.� �E�v�e�n� �i�f� �t�h�e� �s�e�r�v�e�r� �i�s� �c�o�m�p�r�o�m�i�s�e�d�,� �a�l�l� �a�n� �a�t�t�a�c�k�e�r� �g�e�t�s� �a�r�e� �e�n�c�r�y�p�t�e�d� �b�y�t�e�s�.� � � � �-�-�-� � � � �#�#� �A�P�I� �R�e�f�e�r�e�n�c�e� � � � �#�#�#� ��n�e�w� �D�e�c�e�n�t�r�a�V�a�u�l�t�(�a�p�i�K�e�y�,� �o�p�t�i�o�n�s�?�)�� � � � ��t�y�p�e�s�c�r�i�p�t� � �/�/� �P�r�o�d�u�c�t�i�o�n� � �c�o�n�s�t� �v�a�u�l�t� �=� �n�e�w� �D�e�c�e�n�t�r�a�V�a�u�l�t�(�'�d�v�_�y�o�u�r�_�a�p�i�_�k�e�y�'�)�;� � � � �/�/� �L�o�c�a�l� �d�e�v�e�l�o�p�m�e�n�t� � �c�o�n�s�t� �v�a�u�l�t� �=� �n�e�w� �D�e�c�e�n�t�r�a�V�a�u�l�t�(�'�d�v�_�y�o�u�r�_�a�p�i�_�k�e�y�'�,� �{� � � � �b�a�s�e�U�r�l�:� �'�h�t�t�p�:�/�/�l�o�c�a�l�h�o�s�t�:�3�0�0�0�/�a�p�i�'� � �}�)�;� � �� � � � �|� �P�a�r�a�m�e�t�e�r� �|� �T�y�p�e� �|� �R�e�q�u�i�r�e�d� �|� �D�e�s�c�r�i�p�t�i�o�n� �|� � �|�-�-�-�|�-�-�-�|�-�-�-�|�-�-�-�|� � �|� ��a�p�i�K�e�y�� �|� ��s�t�r�i�n�g�� �|� �' �|� �Y�o�u�r� ��d�v�_�.�.�.�� �A�P�I� �k�e�y� �|� � �|� ��o�p�t�i�o�n�s�.�b�a�s�e�U�r�l�� �|� ��s�t�r�i�n�g�� �|� � �|� �O�v�e�r�r�i�d�e� �d�e�f�a�u�l�t� �A�P�I� �e�n�d�p�o�i�n�t� �|� � � � �-�-�-� � � � �#�#�#� ��v�a�u�l�t�.�u�p�l�o�a�d�(�f�i�l�e�,� �f�i�l�e�n�a�m�e�?�,� �m�i�m�e�T�y�p�e�?�)�� � � � �E�n�c�r�y�p�t�s� �t�h�e� �f�i�l�e� �s�e�r�v�e�r�-�s�i�d�e� �a�n�d� �u�p�l�o�a�d�s� �i�t� �t�o� �I�P�F�S�.� �R�e�t�u�r�n�s� �i�m�m�e�d�i�a�t�e�l�y� � �b�l�o�c�k�c�h�a�i�n� �a�n�c�h�o�r�i�n�g� �c�o�n�t�i�n�u�e�s� �a�s�y�n�c�h�r�o�n�o�u�s�l�y� �i�n� �t�h�e� �b�a�c�k�g�r�o�u�n�d�.� � � � ��t�y�p�e�s�c�r�i�p�t� � �c�o�n�s�t� �r�e�s�u�l�t� �=� �a�w�a�i�t� �v�a�u�l�t�.�u�p�l�o�a�d�(�f�i�l�e�B�l�o�b�,� �'�c�o�n�t�r�a�c�t�.�p�d�f�'�,� �'�a�p�p�l�i�c�a�t�i�o�n�/�p�d�f�'�)�;� � � � �/�/� �r�e�s�u�l�t�.�f�i�l�e�I�d� � � � � � � � � ��! �s�a�v�e� �t�h�i�s� �t�o� �r�e�t�r�i�e�v�e� �t�h�e� �f�i�l�e� �l�a�t�e�r� � �/�/� �r�e�s�u�l�t�.�h�a�s�h� � � � � � � � � � � ��! �S�H�A�-�2�5�6� �o�f� �t�h�e� �e�n�c�r�y�p�t�e�d� �b�y�t�e�s� � �/�/� �r�e�s�u�l�t�.�c�i�d� � � � � � � � � � � � ��! �I�P�F�S� �C�o�n�t�e�n�t� �I�d�e�n�t�i�f�i�e�r� � �/�/� �r�e�s�u�l�t�.�i�p�f�s�U�r�l� � � � � � � � ��! �p�u�b�l�i�c� �I�P�F�S� �g�a�t�e�w�a�y� �U�R�L� �(�e�n�c�r�y�p�t�e�d� � �n�o�t� �y�o�u�r� �p�l�a�i�n�t�e�x�t�)� � �/�/� �r�e�s�u�l�t�.�b�l�o�c�k�c�h�a�i�n�S�t�a�t�u�s� ��! �'�p�e�n�d�i�n�g�'� �i�n�i�t�i�a�l�l�y�,� �b�e�c�o�m�e�s� �'�c�o�n�f�i�r�m�e�d�'� �a�f�t�e�r� �~�1�5�s� � �� � � � �|� �P�a�r�a�m�e�t�e�r� �|� �T�y�p�e� �|� �D�e�f�a�u�l�t� �|� �D�e�s�c�r�i�p�t�i�o�n� �|� � �|�-�-�-�|�-�-�-�|�-�-�-�|�-�-�-�|� � �|� ��f�i�l�e�� �|� ��B�l�o�b� �\�|� �U�i�n�t�8�A�r�r�a�y� �\�|� �A�r�r�a�y�B�u�f�f�e�r�� �|� �r�e�q�u�i�r�e�d� �|� �F�i�l�e� �c�o�n�t�e�n�t� �|� � �|� ��f�i�l�e�n�a�m�e�� �|� ��s�t�r�i�n�g�� �|� ��'�f�i�l�e�'�� �|� �O�r�i�g�i�n�a�l� �n�a�m�e� �(�s�t�o�r�e�d� �s�e�c�u�r�e�l�y� � �n�e�v�e�r� �s�e�n�t� �t�o� �I�P�F�S�)� �|� � �|� ��m�i�m�e�T�y�p�e�� �|� ��s�t�r�i�n�g�� �|� ��'�a�p�p�l�i�c�a�t�i�o�n�/�o�c�t�e�t�-�s�t�r�e�a�m�'�� �|� �M�I�M�E� �t�y�p�e� �|� � � � ��R�e�t�u�r�n�s�:�� �[��U�p�l�o�a�d�R�e�s�u�l�t��]�(�#�u�p�l�o�a�d�r�e�s�u�l�t�)� � � � �-�-�-� � � � �#�#�#� ��v�a�u�l�t�.�r�e�t�r�i�e�v�e�(�f�i�l�e�I�d�)�� � � � �F�e�t�c�h�e�s� �e�n�c�r�y�p�t�e�d� �b�y�t�e�s� �f�r�o�m� �I�P�F�S�,� �r�e�-�v�e�r�i�f�i�e�s� �t�h�e� �h�a�s�h� �a�g�a�i�n�s�t� �t�h�e� �b�l�o�c�k�c�h�a�i�n�,� �t�h�e�n� ��d�e�c�r�y�p�t�s� �l�o�c�a�l�l�y� �i�n�s�i�d�e� �t�h�e� �S�D�K��.� �T�h�e� �s�e�r�v�e�r� �n�e�v�e�r� �t�o�u�c�h�e�s� �p�l�a�i�n�t�e�x�t�.� � � � ��t�y�p�e�s�c�r�i�p�t� � �c�o�n�s�t� �r�e�s�u�l�t� �=� �a�w�a�i�t� �v�a�u�l�t�.�r�e�t�r�i�e�v�e�(�'�6�d�7�0�b�7�6�2�-�.�.�.�'�)�;� � � � �/�/� �r�e�s�u�l�t�.�f�i�l�e� � � � � � � � ��! �U�i�n�t�8�A�r�r�a�y� �o�f� �d�e�c�r�y�p�t�e�d� �b�y�t�e�s� � �/�/� �r�e�s�u�l�t�.�n�a�m�e� � � � � � � � ��! �o�r�i�g�i�n�a�l� �f�i�l�e�n�a�m�e� � �/�/� �r�e�s�u�l�t�.�m�i�m�e�T�y�p�e� � � � ��! �e�.�g�.� �'�a�p�p�l�i�c�a�t�i�o�n�/�p�d�f�'� � �/�/� �r�e�s�u�l�t�.�i�n�t�e�g�r�i�t�y� � � ��! �'�o�k�'� �|� �'�f�a�i�l�e�d�'� � �/�/� �r�e�s�u�l�t�.�b�l�o�c�k�c�h�a�i�n� � ��! �{� �v�e�r�i�f�i�e�d�,� �s�t�a�t�u�s�,� �t�x�,� �r�e�a�s�o�n� �}� � � � �/�/� �B�r�o�w�s�e�r� �d�o�w�n�l�o�a�d� � �c�o�n�s�t� �b�l�o�b� �=� �n�e�w� �B�l�o�b�(�[�r�e�s�u�l�t�.�f�i�l�e�]�,� �{� �t�y�p�e�:� �r�e�s�u�l�t�.�m�i�m�e�T�y�p�e� �}�)�;� � �c�o�n�s�t� �u�r�l� �=� �U�R�L�.�c�r�e�a�t�e�O�b�j�e�c�t�U�R�L�(�b�l�o�b�)�;� � �c�o�n�s�t� �a� �=� �d�o�c�u�m�e�n�t�.�c�r�e�a�t�e�E�l�e�m�e�n�t�(�'�a�'�)�;� � �a�.�h�r�e�f� �=� �u�r�l�;� � �a�.�d�o�w�n�l�o�a�d� �=� �r�e�s�u�l�t�.�n�a�m�e�;� � �a�.�c�l�i�c�k�(�)�;� � �� � � � ��R�e�t�u�r�n�s�:�� �[��R�e�t�r�i�e�v�e�R�e�s�u�l�t��]�(�#�r�e�t�r�i�e�v�e�r�e�s�u�l�t�)� � � � �-�-�-� � � � �#�#�#� ��v�a�u�l�t�.�v�e�r�i�f�y�(�f�i�l�e�I�d�)�� � � � �C�h�e�c�k�s� �f�i�l�e� �i�n�t�e�g�r�i�t�y� �a�g�a�i�n�s�t� �t�h�e� �P�o�l�y�g�o�n� �b�l�o�c�k�c�h�a�i�n� � �f�a�s�t�,� �n�o� �d�o�w�n�l�o�a�d� �r�e�q�u�i�r�e�d�.� � � � ��t�y�p�e�s�c�r�i�p�t� � �c�o�n�s�t� �r�e�s�u�l�t� �=� �a�w�a�i�t� �v�a�u�l�t�.�v�e�r�i�f�y�(�'�6�d�7�0�b�7�6�2�-�.�.�.�'�)�;� � � � �/�/� �r�e�s�u�l�t�.�v�e�r�i�f�i�e�d� � � � � � � � ��! �t�r�u�e� �i�f� �h�a�s�h� �m�a�t�c�h�e�s� �o�n�-�c�h�a�i�n� �r�e�c�o�r�d� � �/�/� �r�e�s�u�l�t�.�r�e�a�s�o�n� � � � � � � � � � ��! �h�u�m�a�n�-�r�e�a�d�a�b�l�e� �e�x�p�l�a�n�a�t�i�o�n� � �/�/� �r�e�s�u�l�t�.�h�a�s�h� � � � � � � � � � � � ��! �S�H�A�-�2�5�6� �s�t�o�r�e�d� �i�n� �d�a�t�a�b�a�s�e� � �/�/� �r�e�s�u�l�t�.�o�n�C�h�a�i�n�H�a�s�h� � � � � ��! �S�H�A�-�2�5�6� �r�e�a�d� �f�r�o�m� �b�l�o�c�k�c�h�a�i�n� �t�x�.�d�a�t�a� � �/�/� �r�e�s�u�l�t�.�b�l�o�c�k�c�h�a�i�n�T�x� � � � ��! �'�0�x�a�b�9�7�6�d�e�4�.�.�.�'� � � � �i�f� �(�!�r�e�s�u�l�t�.�v�e�r�i�f�i�e�d�)� �{� � � � �c�o�n�s�o�l�e�.�e�r�r�o�r�(�'��&� � �F�i�l�e� �i�n�t�e�g�r�i�t�y� �c�o�m�p�r�o�m�i�s�e�d�:�'�,� �r�e�s�u�l�t�.�r�e�a�s�o�n�)�;� � �}� � �� � � � ��R�e�t�u�r�n�s�:�� �[��V�e�r�i�f�y�R�e�s�u�l�t��]�(�#�v�e�r�i�f�y�r�e�s�u�l�t�)� � � � �-�-�-� � � � �#�#�#� ��v�a�u�l�t�.�l�i�s�t�(�)�� � � � �R�e�t�u�r�n�s� �a�l�l� �f�i�l�e�s� �u�p�l�o�a�d�e�d� �u�n�d�e�r� �t�h�i�s� �A�P�I� �k�e�y�.� � � � ��t�y�p�e�s�c�r�i�p�t� � �c�o�n�s�t� �f�i�l�e�s� �=� �a�w�a�i�t� �v�a�u�l�t�.�l�i�s�t�(�)�;� � � � �f�i�l�e�s�.�f�o�r�E�a�c�h�(�(�{� �f�i�l�e�I�d�,� �o�r�i�g�i�n�a�l�N�a�m�e�,� �s�i�z�e�B�y�t�e�s�,� �c�r�e�a�t�e�d�A�t� �}�)� �=�>� �{� � � � �c�o�n�s�t� �k�b� �=� �(�s�i�z�e�B�y�t�e�s� �/� �1�0�2�4�)�.�t�o�F�i�x�e�d�(�1�)�;� � � � �c�o�n�s�o�l�e�.�l�o�g�(��[�$�{�c�r�e�a�t�e�d�A�t�.�s�l�i�c�e�(�0�,� �1�0�)�}�]� �$�{�o�r�i�g�i�n�a�l�N�a�m�e�}� �(�$�{�k�b�}� �K�B�)� ��! �$�{�f�i�l�e�I�d�}��)�;� � �}�)�;� � �� � � � ��R�e�t�u�r�n�s�:�� �[��F�i�l�e�I�n�f�o�[�]��]�(�#�f�i�l�e�i�n�f�o�)� � � � �-�-�-� � � � �#�#�#� ��v�a�u�l�t�.�d�e�l�e�t�e�(�f�i�l�e�I�d�)�� � � � �P�e�r�m�a�n�e�n�t�l�y� �d�e�l�e�t�e�s� �a� �f�i�l�e� �r�e�c�o�r�d� �a�n�d� �i�t�s� �e�n�c�r�y�p�t�i�o�n� �k�e�y� �f�r�o�m� �D�e�c�e�n�t�r�a�V�a�u�l�t�'�s� �d�a�t�a�b�a�s�e�.� � � � �>� ��N�o�t�e�:�� �I�P�F�S� �i�s� �c�o�n�t�e�n�t�-�a�d�d�r�e�s�s�e�d� �a�n�d� �d�e�c�e�n�t�r�a�l�i�z�e�d� � �t�h�e� �e�n�c�r�y�p�t�e�d� �b�y�t�e�s� �o�n� �I�P�F�S� �c�a�n�n�o�t� �b�e� �r�e�m�o�v�e�d�,� �b�u�t� �w�i�t�h�o�u�t� �t�h�e� �e�n�c�r�y�p�t�i�o�n� �k�e�y� �t�h�e�y� �a�r�e� �p�e�r�m�a�n�e�n�t�l�y� �u�n�r�e�a�d�a�b�l�e�.� � � � ��t�y�p�e�s�c�r�i�p�t� � �a�w�a�i�t� �v�a�u�l�t�.�d�e�l�e�t�e�(�'�6�d�7�0�b�7�6�2�-�.�.�.�'�)�;� � �c�o�n�s�o�l�e�.�l�o�g�(�'�D�e�l�e�t�e�d� � �d�e�c�r�y�p�t�i�o�n� �k�e�y� �d�e�s�t�r�o�y�e�d�'�)�;� � �� � � � �-�-�-� � � � �#�#�#� ��v�a�u�l�t�.�w�a�i�t�F�o�r�B�l�o�c�k�c�h�a�i�n�(�f�i�l�e�I�d�,� �t�i�m�e�o�u�t�M�s�?�)�� � � � �P�o�l�l�s� �u�n�t�i�l� �b�l�o�c�k�c�h�a�i�n� �a�n�c�h�o�r�i�n�g� �c�o�m�p�l�e�t�e�s�.� �U�s�e� �w�h�e�n� �y�o�u� �n�e�e�d� �t�h�e� �o�n�-�c�h�a�i�n� �T�X� �h�a�s�h� �b�e�f�o�r�e� �p�r�o�c�e�e�d�i�n�g� �(�e�.�g�.�,� �s�h�o�w�i�n�g� �a� �c�o�m�p�l�i�a�n�c�e� �a�u�d�i�t� �t�r�a�i�l�)�.� � � � ��t�y�p�e�s�c�r�i�p�t� � �c�o�n�s�t� �{� �f�i�l�e�I�d� �}� �=� �a�w�a�i�t� �v�a�u�l�t�.�u�p�l�o�a�d�(�f�i�l�e�,� �'�a�u�d�i�t�-�l�o�g�.�p�d�f�'�)�;� � � � �/�/� �U�p�l�o�a�d� �r�e�t�u�r�n�s� �i�m�m�e�d�i�a�t�e�l�y� �w�i�t�h� �b�l�o�c�k�c�h�a�i�n� �s�t�a�t�u�s� �'�p�e�n�d�i�n�g�'� � �/�/� �w�a�i�t�F�o�r�B�l�o�c�k�c�h�a�i�n� �b�l�o�c�k�s� �u�n�t�i�l� �c�o�n�f�i�r�m�e�d� �(�~�1�5� �s�e�c�o�n�d�s� �o�n� �P�o�l�y�g�o�n� �A�m�o�y�)� � �c�o�n�s�t� �s�t�a�t�u�s� �=� �a�w�a�i�t� �v�a�u�l�t�.�w�a�i�t�F�o�r�B�l�o�c�k�c�h�a�i�n�(�f�i�l�e�I�d�,� �9�0�_�0�0�0�)�;� � � � �i�f� �(�s�t�a�t�u�s� �=�=�=� �'�c�o�n�f�i�r�m�e�d�'�)� �{� � � � �c�o�n�s�t� �{� �b�l�o�c�k�c�h�a�i�n�T�x� �}� �=� �a�w�a�i�t� �v�a�u�l�t�.�v�e�r�i�f�y�(�f�i�l�e�I�d�)�;� � � � �c�o�n�s�t� �e�x�p�l�o�r�e�r�U�r�l� �=� ��h�t�t�p�s�:�/�/�a�m�o�y�.�p�o�l�y�g�o�n�s�c�a�n�.�c�o�m�/�t�x�/�$�{�b�l�o�c�k�c�h�a�i�n�T�x�}��;� � � � �c�o�n�s�o�l�e�.�l�o�g�(�'�O�n�-�c�h�a�i�n� �p�r�o�o�f�:�'�,� �e�x�p�l�o�r�e�r�U�r�l�)�;� � �}� � �� � � � �|� �P�a�r�a�m�e�t�e�r� �|� �T�y�p�e� �|� �D�e�f�a�u�l�t� �|� �D�e�s�c�r�i�p�t�i�o�n� �|� � �|�-�-�-�|�-�-�-�|�-�-�-�|�-�-�-�|� � �|� ��f�i�l�e�I�d�� �|� ��s�t�r�i�n�g�� �|� �r�e�q�u�i�r�e�d� �|� �F�i�l�e� �I�D� �f�r�o�m� �u�p�l�o�a�d� �|� � �|� ��t�i�m�e�o�u�t�M�s�� �|� ��n�u�m�b�e�r�� �|� ��6�0�0�0�0�� �|� �M�a�x� �t�i�m�e� �t�o� �w�a�i�t� �(�m�s�)� �|� � � � ��R�e�t�u�r�n�s�:�� ��'�c�o�n�f�i�r�m�e�d�'� �|� �'�f�a�i�l�e�d�'�� � � � �-�-�-� � � � �#�#� �T�y�p�e�S�c�r�i�p�t� �T�y�p�e�s� � � � �#�#�#� ��U�p�l�o�a�d�R�e�s�u�l�t�� � � � ��t�y�p�e�s�c�r�i�p�t� � �i�n�t�e�r�f�a�c�e� �U�p�l�o�a�d�R�e�s�u�l�t� �{� � � � �f�i�l�e�I�d�:� �s�t�r�i�n�g�;� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �/�/� �U�U�I�D� � �s�t�o�r�e� �t�h�i�s� � � � �h�a�s�h�:� �s�t�r�i�n�g�;� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �/�/� �S�H�A�-�2�5�6� �h�e�x� �(�6�4� �c�h�a�r�s�)� � � � �c�i�d�:� �s�t�r�i�n�g�;� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �/�/� �I�P�F�S� �C�I�D� �(�Q�m�.�.�.� �o�r� �b�a�f�y�.�.�.�)� � � � �i�p�f�s�U�r�l�:� �s�t�r�i�n�g�;� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �/�/� �h�t�t�p�s�:�/�/�g�a�t�e�w�a�y�.�p�i�n�a�t�a�.�c�l�o�u�d�/�.�.�.� � � � �b�l�o�c�k�c�h�a�i�n�S�t�a�t�u�s�:� �'�p�e�n�d�i�n�g�'� �|� �'�c�o�n�f�i�r�m�e�d�'� �|� �'�f�a�i�l�e�d�'�;� �/�/� �a�n�c�h�o�r�i�n�g� �s�t�a�t�e� � �}� � �� � � � �#�#�#� ��R�e�t�r�i�e�v�e�R�e�s�u�l�t�� � � � ��t�y�p�e�s�c�r�i�p�t� � �i�n�t�e�r�f�a�c�e� �R�e�t�r�i�e�v�e�R�e�s�u�l�t� �{� � � � �f�i�l�e�:� �U�i�n�t�8�A�r�r�a�y�;� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �/�/� �d�e�c�r�y�p�t�e�d� �b�y�t�e�s� � � � �n�a�m�e�:� �s�t�r�i�n�g�;� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �/�/� �o�r�i�g�i�n�a�l� �f�i�l�e�n�a�m�e� � � � �m�i�m�e�T�y�p�e�:� �s�t�r�i�n�g�;� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �/�/� �e�.�g�.� �'�a�p�p�l�i�c�a�t�i�o�n�/�p�d�f�'� � � � �i�n�t�e�g�r�i�t�y�:� �'�o�k�'� �|� �'�f�a�i�l�e�d�'�;� � � � � � � � � � � � � � � � � � � � � � � � � � � �/�/� �h�a�s�h� �r�e�-�v�e�r�i�f�i�e�d� �o�n� �r�e�t�r�i�e�v�e� � � � �b�l�o�c�k�c�h�a�i�n�:� �{� � � � � � �v�e�r�i�f�i�e�d�:� �b�o�o�l�e�a�n�;� � � � � � �s�t�a�t�u�s�:� �'�p�e�n�d�i�n�g�'� �|� �'�c�o�n�f�i�r�m�e�d�'� �|� �'�f�a�i�l�e�d�'�;� � � � � � �t�x�:� �s�t�r�i�n�g� �|� �n�u�l�l�;� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �/�/� �P�o�l�y�g�o�n� �T�X� �h�a�s�h� � � � � � �r�e�a�s�o�n�:� �s�t�r�i�n�g�;� � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �/�/� �e�.�g�.� �"�H�a�s�h� �m�a�t�c�h�e�s� �o�n�-�c�h�a�i�n� �r�e�c�o�r�d�"� � � � �}�;� � �}� � �� � � � �#�#�#� ��V�e�r�i�f�y�R�e�s�u�l�t�� � � � ��t�y�p�e�s�c�r�i�p�t� � �i�n�t�e�r�f�a�c�e� �V�e�r�i�f�y�R�e�s�u�l�t� �{� � � � �v�e�r�i�f�i�e�d�:� �b�o�o�l�e�a�n�;� � � � � � � � � �/�/� �t�r�u�e� �=� �f�i�l�e� �i�s� �u�n�t�a�m�p�e�r�e�d� � � � �r�e�a�s�o�n�:� �s�t�r�i�n�g�;� � � � � � � � � � � � �/�/� �h�u�m�a�n�-�r�e�a�d�a�b�l�e� �e�x�p�l�a�n�a�t�i�o�n� � � � �f�i�l�e�I�d�:� �s�t�r�i�n�g�;� � � � �h�a�s�h�:� �s�t�r�i�n�g�;� � � � � � � � � � � � � � �/�/� �S�H�A�-�2�5�6� �s�t�o�r�e�d� �i�n� �D�e�c�e�n�t�r�a�V�a�u�l�t� �D�B� � � � �o�n�C�h�a�i�n�H�a�s�h�:� �s�t�r�i�n�g� �|� �n�u�l�l�;� �/�/� �S�H�A�-�2�5�6� �r�e�a�d� �f�r�o�m� �b�l�o�c�k�c�h�a�i�n� �t�x� �d�a�t�a� � � � �b�l�o�c�k�c�h�a�i�n�T�x�:� �s�t�r�i�n�g� �|� �n�u�l�l�;� �/�/� �'�0�x�.�.�.�'� � �}� � �� � � � �#�#�#� ��F�i�l�e�I�n�f�o�� � � � ��t�y�p�e�s�c�r�i�p�t� � �i�n�t�e�r�f�a�c�e� �F�i�l�e�I�n�f�o� �{� � � � �f�i�l�e�I�d�:� �s�t�r�i�n�g�;� � � � �o�r�i�g�i�n�a�l�N�a�m�e�:� �s�t�r�i�n�g�;� � � � �m�i�m�e�T�y�p�e�:� �s�t�r�i�n�g�;� � � � �s�i�z�e�B�y�t�e�s�:� �n�u�m�b�e�r�;� � � � �h�a�s�h�:� �s�t�r�i�n�g�;� � � � �c�i�d�:� �s�t�r�i�n�g�;� � � � �c�r�e�a�t�e�d�A�t�:� �s�t�r�i�n�g�;� � � � � � � � � �/�/� �I�S�O� �8�6�0�1� � �e�.�g�.� �"�2�0�2�6�-�0�3�-�0�9�T�1�4�:�2�2�:�0�1�.�0�0�0�Z�"� � �}� � �� � � � �-�-�-� � � � �#�#� �F�r�a�m�e�w�o�r�k� �E�x�a�m�p�l�e�s� � � � �#�#�#� �R�e�a�c�t� � �F�i�l�e� �U�p�l�o�a�d� �C�o�m�p�o�n�e�n�t� � � � ��t�s�x� � �i�m�p�o�r�t� �{� �u�s�e�S�t�a�t�e� �}� �f�r�o�m� �'�r�e�a�c�t�'�;� � �i�m�p�o�r�t� �{� �D�e�c�e�n�t�r�a�V�a�u�l�t� �}� �f�r�o�m� �'�d�e�c�e�n�t�r�a�v�a�u�l�t�'�;� � � � �c�o�n�s�t� �v�a�u�l�t� �=� �n�e�w� �D�e�c�e�n�t�r�a�V�a�u�l�t�(�i�m�p�o�r�t�.�m�e�t�a�.�e�n�v�.�V�I�T�E�_�D�V�_�A�P�I�_�K�E�Y�)�;� � � � �e�x�p�o�r�t� �f�u�n�c�t�i�o�n� �S�e�c�u�r�e�U�p�l�o�a�d�(�)� �{� � � � �c�o�n�s�t� �[�f�i�l�e�I�d�,� �s�e�t�F�i�l�e�I�d�]� �=� �u�s�e�S�t�a�t�e�<�s�t�r�i�n�g� �|� �n�u�l�l�>�(�n�u�l�l�)�;� � � � �c�o�n�s�t� �[�s�t�a�t�u�s�,� �s�e�t�S�t�a�t�u�s�]� �=� �u�s�e�S�t�a�t�e�(�'�'�)�;� � � � � � �a�s�y�n�c� �f�u�n�c�t�i�o�n� �h�a�n�d�l�e�U�p�l�o�a�d�(�e�:� �R�e�a�c�t�.�C�h�a�n�g�e�E�v�e�n�t�<�H�T�M�L�I�n�p�u�t�E�l�e�m�e�n�t�>�)� �{� � � � � � �c�o�n�s�t� �f�i�l�e� �=� �e�.�t�a�r�g�e�t�.�f�i�l�e�s�?�.�[�0�]�;� � � � � � �i�f� �(�!�f�i�l�e�)� �r�e�t�u�r�n�;� � � � � � � � �s�e�t�S�t�a�t�u�s�(�'�E�n�c�r�y�p�t�i�n�g� �a�n�d� �u�p�l�o�a�d�i�n�g�& '�)�;� � � � � � �t�r�y� �{� � � � � � � � �c�o�n�s�t� �{� �f�i�l�e�I�d� �}� �=� �a�w�a�i�t� �v�a�u�l�t�.�u�p�l�o�a�d�(�f�i�l�e�,� �f�i�l�e�.�n�a�m�e�,� �f�i�l�e�.�t�y�p�e�)�;� � � � � � � � �s�e�t�F�i�l�e�I�d�(�f�i�l�e�I�d�)�;� � � � � � � � �s�e�t�S�t�a�t�u�s�(�'�' �U�p�l�o�a�d�e�d�!� �W�a�i�t�i�n�g� �f�o�r� �b�l�o�c�k�c�h�a�i�n� �c�o�n�f�i�r�m�a�t�i�o�n�& '�)�;� � � � � � � � � � �a�w�a�i�t� �v�a�u�l�t�.�w�a�i�t�F�o�r�B�l�o�c�k�c�h�a�i�n�(�f�i�l�e�I�d�)�;� � � � � � � � �s�e�t�S�t�a�t�u�s�(�'��&� �B�l�o�c�k�c�h�a�i�n� �c�o�n�f�i�r�m�e�d�!�'�)�;� � � � � � �}� �c�a�t�c�h� �(�e�r�r�)� �{� � � � � � � � �s�e�t�S�t�a�t�u�s�(��L' �E�r�r�o�r�:� �$�{�e�r�r� �i�n�s�t�a�n�c�e�o�f� �E�r�r�o�r� �?� �e�r�r�.�m�e�s�s�a�g�e� �:� �S�t�r�i�n�g�(�e�r�r�)�}��)�;� � � � � � �}� � � � �}� � � � � � �a�s�y�n�c� �f�u�n�c�t�i�o�n� �h�a�n�d�l�e�D�o�w�n�l�o�a�d�(�)� �{� � � � � � �i�f� �(�!�f�i�l�e�I�d�)� �r�e�t�u�r�n�;� � � � � � �c�o�n�s�t� �{� �f�i�l�e�,� �n�a�m�e�,� �m�i�m�e�T�y�p�e� �}� �=� �a�w�a�i�t� �v�a�u�l�t�.�r�e�t�r�i�e�v�e�(�f�i�l�e�I�d�)�;� � � � � � �c�o�n�s�t� �b�l�o�b� �=� �n�e�w� �B�l�o�b�(�[�f�i�l�e�]�,� �{� �t�y�p�e�:� �m�i�m�e�T�y�p�e� �}�)�;� � � � � � �c�o�n�s�t� �u�r�l� �=� �U�R�L�.�c�r�e�a�t�e�O�b�j�e�c�t�U�R�L�(�b�l�o�b�)�;� � � � � � �O�b�j�e�c�t�.�a�s�s�i�g�n�(�d�o�c�u�m�e�n�t�.�c�r�e�a�t�e�E�l�e�m�e�n�t�(�'�a�'�)�,� �{� �h�r�e�f�:� �u�r�l�,� �d�o�w�n�l�o�a�d�:� �n�a�m�e� �}�)�.�c�l�i�c�k�(�)�;� � � � �}� � � � � � �r�e�t�u�r�n� �(� � � � � � �<�d�i�v�>� � � � � � � � �<�i�n�p�u�t� �t�y�p�e�=�"�f�i�l�e�"� �o�n�C�h�a�n�g�e�=�{�h�a�n�d�l�e�U�p�l�o�a�d�}� �/�>� � � � � � � � �<�p�>�{�s�t�a�t�u�s�}�<�/�p�>� � � � � � � � �{�f�i�l�e�I�d� �&�&� �<�b�u�t�t�o�n� �o�n�C�l�i�c�k�=�{�h�a�n�d�l�e�D�o�w�n�l�o�a�d�}�>�D�o�w�n�l�o�a�d� �D�e�c�r�y�p�t�e�d�<�/�b�u�t�t�o�n�>�}� � � � � � �<�/�d�i�v�>� � � � �)�;� � �}� � �� � � � �#�#�#� �N�e�x�t�.�j�s� � �S�e�r�v�e�r�-�S�i�d�e� �U�p�l�o�a�d� �R�o�u�t�e� � � � ��t�y�p�e�s�c�r�i�p�t� � �/�/� �a�p�p�/�a�p�i�/�u�p�l�o�a�d�/�r�o�u�t�e�.�t�s� � �i�m�p�o�r�t� �{� �D�e�c�e�n�t�r�a�V�a�u�l�t� �}� �f�r�o�m� �'�d�e�c�e�n�t�r�a�v�a�u�l�t�'�;� � �i�m�p�o�r�t� �{� �N�e�x�t�R�e�q�u�e�s�t�,� �N�e�x�t�R�e�s�p�o�n�s�e� �}� �f�r�o�m� �'�n�e�x�t�/�s�e�r�v�e�r�'�;� � � � �c�o�n�s�t� �v�a�u�l�t� �=� �n�e�w� �D�e�c�e�n�t�r�a�V�a�u�l�t�(�p�r�o�c�e�s�s�.�e�n�v�.�D�V�_�A�P�I�_�K�E�Y�!�,� �{� � � � �b�a�s�e�U�r�l�:� �p�r�o�c�e�s�s�.�e�n�v�.�D�V�_�A�P�I�_�U�R�L� � �}�)�;� � � � �e�x�p�o�r�t� �a�s�y�n�c� �f�u�n�c�t�i�o�n� �P�O�S�T�(�r�e�q�:� �N�e�x�t�R�e�q�u�e�s�t�)� �{� � � � �c�o�n�s�t� �f�o�r�m� �=� �a�w�a�i�t� �r�e�q�.�f�o�r�m�D�a�t�a�(�)�;� � � � �c�o�n�s�t� �f�i�l�e� �=� �f�o�r�m�.�g�e�t�(�'�f�i�l�e�'�)� �a�s� �F�i�l�e� �|� �n�u�l�l�;� � � � � � �i�f� �(�!�f�i�l�e�)� �{� � � � � � �r�e�t�u�r�n� �N�e�x�t�R�e�s�p�o�n�s�e�.�j�s�o�n�(�{� �e�r�r�o�r�:� �'�N�o� �f�i�l�e� �p�r�o�v�i�d�e�d�'� �}�,� �{� �s�t�a�t�u�s�:� �4�0�0� �}�)�;� � � � �}� � � � � � �c�o�n�s�t� �{� �f�i�l�e�I�d�,� �b�l�o�c�k�c�h�a�i�n�S�t�a�t�u�s�,� �c�i�d� �}� �=� �a�w�a�i�t� �v�a�u�l�t�.�u�p�l�o�a�d�(� � � � � � �f�i�l�e�,� � � � � � �f�i�l�e�.�n�a�m�e�,� � � � � � �f�i�l�e�.�t�y�p�e� � � � �)�;� � � � � � �r�e�t�u�r�n� �N�e�x�t�R�e�s�p�o�n�s�e�.�j�s�o�n�(�{� �f�i�l�e�I�d�,� �b�l�o�c�k�c�h�a�i�n�S�t�a�t�u�s�,� �c�i�d� �}�)�;� � �}� � �� � � � �#�#�#� �N�o�d�e�.�j�s� � �A�u�t�o�m�a�t�e�d� �B�a�c�k�u�p� �S�c�r�i�p�t� � � � ��j�a�v�a�s�c�r�i�p�t� � �i�m�p�o�r�t� �{� �D�e�c�e�n�t�r�a�V�a�u�l�t� �}� �f�r�o�m� �'�d�e�c�e�n�t�r�a�v�a�u�l�t�'�;� � �i�m�p�o�r�t� �{� �r�e�a�d�F�i�l�e�S�y�n�c�,� �w�r�i�t�e�F�i�l�e�S�y�n�c� �}� �f�r�o�m� �'�f�s�'�;� � � � �c�o�n�s�t� �v�a�u�l�t� �=� �n�e�w� �D�e�c�e�n�t�r�a�V�a�u�l�t�(�p�r�o�c�e�s�s�.�e�n�v�.�D�V�_�A�P�I�_�K�E�Y�,� �{� � � � �b�a�s�e�U�r�l�:� �p�r�o�c�e�s�s�.�e�n�v�.�D�V�_�A�P�I�_�U�R�L� �?�?� �'�h�t�t�p�:�/�/�l�o�c�a�l�h�o�s�t�:�3�0�0�0�/�a�p�i�'� � �}�)�;� � � � �/�/� ��%�% �B�a�c�k�u�p� ��%�%�%�%�%�%�%�%�%�%�%�%�%�%�%�%�%�%�%�%�%�%�%�%�%�%�%�%�%�%�%�%�%�%�%�%�%�%�%�%�%�%�%�%�%�%�%�%�%�%�%�%�%�%�% � �c�o�n�s�t� �b�u�f�f�e�r� �=� �r�e�a�d�F�i�l�e�S�y�n�c�(�'�.�/�d�a�t�a�b�a�s�e�-�b�a�c�k�u�p�.�s�q�l�'�)�;� � �c�o�n�s�t� �{� �f�i�l�e�I�d� �}� �=� �a�w�a�i�t� �v�a�u�l�t�.�u�p�l�o�a�d�(�b�u�f�f�e�r�,� �'�b�a�c�k�u�p�.�s�q�l�'�,� �'�a�p�p�l�i�c�a�t�i�o�n�/�s�q�l�'�)�;� � �c�o�n�s�o�l�e�.�l�o�g�(�'�B�a�c�k�e�d� �u�p�.� �F�i�l�e� �I�D�:�'�,� �f�i�l�e�I�d�)�;� � � � �/�/� �W�a�i�t� �f�o�r� �o�n�-�c�h�a�i�n� �c�o�n�f�i�r�m�a�t�i�o�n� � �a�w�a�i�t� �v�a�u�l�t�.�w�a�i�t�F�o�r�B�l�o�c�k�c�h�a�i�n�(�f�i�l�e�I�d�)�;� � �c�o�n�s�t� �{� �b�l�o�c�k�c�h�a�i�n�T�x� �}� �=� �a�w�a�i�t� �v�a�u�l�t�.�v�e�r�i�f�y�(�f�i�l�e�I�d�)�;� � �c�o�n�s�o�l�e�.�l�o�g�(�'�B�l�o�c�k�c�h�a�i�n� �T�X�:�'�,� ��h�t�t�p�s�:�/�/�a�m�o�y�.�p�o�l�y�g�o�n�s�c�a�n�.�c�o�m�/�t�x�/�$�{�b�l�o�c�k�c�h�a�i�n�T�x�}��)�;� � � � �/�/� ��%�% �R�e�s�t�o�r�e� ��%�%�%�%�%�%�%�%�%�%�%�%�%�%�%�%�%�%�%�%�%�%�%�%�%�%�%�%�%�%�%�%�%�%�%�%�%�%�%�%�%�%�%�%�%�%�%�%�%�%�%�%�%�% � �c�o�n�s�t� �{� �f�i�l�e�,� �i�n�t�e�g�r�i�t�y� �}� �=� �a�w�a�i�t� �v�a�u�l�t�.�r�e�t�r�i�e�v�e�(�f�i�l�e�I�d�)�;� � �i�f� �(�i�n�t�e�g�r�i�t�y� �!�=�=� �'�o�k�'�)� �t�h�r�o�w� �n�e�w� �E�r�r�o�r�(�'�I�n�t�e�g�r�i�t�y� �c�h�e�c�k� �f�a�i�l�e�d� � �a�b�o�r�t�i�n�g� �r�e�s�t�o�r�e�'�)�;� � �w�r�i�t�e�F�i�l�e�S�y�n�c�(�'�.�/�r�e�s�t�o�r�e�d�-�b�a�c�k�u�p�.�s�q�l�'�,� �f�i�l�e�)�;� � �c�o�n�s�o�l�e�.�l�o�g�(�'�R�e�s�t�o�r�e�d� �s�u�c�c�e�s�s�f�u�l�l�y�'�)�;� � �� � � � �-�-�-� � � � �#�#� �E�r�r�o�r� �H�a�n�d�l�i�n�g� � � � �A�l�l� �S�D�K� �m�e�t�h�o�d�s� �t�h�r�o�w� �a� �p�l�a�i�n� ��E�r�r�o�r�� �w�i�t�h� �a� �d�e�s�c�r�i�p�t�i�v�e� �m�e�s�s�a�g�e� �o�n� �f�a�i�l�u�r�e�.� � � � ��t�y�p�e�s�c�r�i�p�t� � �i�m�p�o�r�t� �{� �D�e�c�e�n�t�r�a�V�a�u�l�t� �}� �f�r�o�m� �'�d�e�c�e�n�t�r�a�v�a�u�l�t�'�;� � � � �c�o�n�s�t� �v�a�u�l�t� �=� �n�e�w� �D�e�c�e�n�t�r�a�V�a�u�l�t�(�'�d�v�_�y�o�u�r�_�a�p�i�_�k�e�y�'�)�;� � � � �t�r�y� �{� � � � �c�o�n�s�t� �{� �f�i�l�e�I�d� �}� �=� �a�w�a�i�t� �v�a�u�l�t�.�u�p�l�o�a�d�(�f�i�l�e�,� �'�d�o�c�.�p�d�f�'�,� �'�a�p�p�l�i�c�a�t�i�o�n�/�p�d�f�'�)�;� � �}� �c�a�t�c�h� �(�e�r�r�)� �{� � � � �i�f� �(�e�r�r� �i�n�s�t�a�n�c�e�o�f� �E�r�r�o�r�)� �{� � � � � � �c�o�n�s�o�l�e�.�e�r�r�o�r�(�'�U�p�l�o�a�d� �f�a�i�l�e�d�:�'�,� �e�r�r�.�m�e�s�s�a�g�e�)�;� � � � � � �/�/� �C�o�m�m�o�n� �m�e�s�s�a�g�e�s�:� � � � � � �/�/� ��! �"�U�p�l�o�a�d� �f�a�i�l�e�d�:� �4�0�1� �U�n�a�u�t�h�o�r�i�z�e�d�"� �(�b�a�d� �A�P�I� �k�e�y�)� � � � � � �/�/� ��! �"�U�p�l�o�a�d� �f�a�i�l�e�d�:� �4�1�3� �P�a�y�l�o�a�d� �T�o�o� �L�a�r�g�e�"� �(�f�i�l�e� �t�o�o� �b�i�g�)� � � � � � �/�/� ��! �"�U�p�l�o�a�d� �f�a�i�l�e�d�:� �F�a�i�l�e�d� �t�o� �f�e�t�c�h�"� �(�n�e�t�w�o�r�k� �e�r�r�o�r�)� � � � �}� � �}� � � � �/�/� �I�n�t�e�g�r�i�t�y� �f�a�i�l�u�r�e� �o�n� �r�e�t�r�i�e�v�e� � �t�r�y� �{� � � � �c�o�n�s�t� �r�e�s�u�l�t� �=� �a�w�a�i�t� �v�a�u�l�t�.�r�e�t�r�i�e�v�e�(�f�i�l�e�I�d�)�;� � � � �i�f� �(�r�e�s�u�l�t�.�i�n�t�e�g�r�i�t�y� �=�=�=� �'�f�a�i�l�e�d�'�)� �{� � � � � � �t�h�r�o�w� �n�e�w� �E�r�r�o�r�(�'�H�a�s�h� �m�i�s�m�a�t�c�h� � �f�i�l�e� �m�a�y� �h�a�v�e� �b�e�e�n� �t�a�m�p�e�r�e�d� �w�i�t�h�'�)�;� � � � �}� � �}� �c�a�t�c�h� �(�e�r�r�)� �{� � � � �c�o�n�s�o�l�e�.�e�r�r�o�r�(�e�r�r�)�;� � �}� � �� � � � �-�-�-� � � � �#�#� �E�n�v�i�r�o�n�m�e�n�t� �V�a�r�i�a�b�l�e�s� � � � �K�e�e�p� �y�o�u�r� �A�P�I� �k�e�y� �o�u�t� �o�f� �s�o�u�r�c�e� �c�o�d�e� �u�s�i�n�g� �e�n�v�i�r�o�n�m�e�n�t� �v�a�r�i�a�b�l�e�s�.� � � � �#�#�#� �N�o�d�e�.�j�s� �/� �N�e�x�t�.�j�s� �/� �V�i�t�e� � � � ��b�a�s�h� � �#� �.�e�n�v� � �D�V�_�A�P�I�_�K�E�Y�=�d�v�_�y�o�u�r�_�a�p�i�_�k�e�y�_�h�e�r�e� � �D�V�_�A�P�I�_�U�R�L�=�h�t�t�p�s�:�/�/�d�e�c�e�n�t�r�a�-�v�a�u�l�t�.�o�n�r�e�n�d�e�r�.�c�o�m�/�a�p�i� � �#� �o�p�t�i�o�n�a�l� �o�v�e�r�r�i�d�e� � �� � � � ��t�y�p�e�s�c�r�i�p�t� � �/�/� �U�s�a�g�e� � �c�o�n�s�t� �v�a�u�l�t� �=� �n�e�w� �D�e�c�e�n�t�r�a�V�a�u�l�t�(�p�r�o�c�e�s�s�.�e�n�v�.�D�V�_�A�P�I�_�K�E�Y�!�,� �{� � � � �b�a�s�e�U�r�l�:� �p�r�o�c�e�s�s�.�e�n�v�.�D�V�_�A�P�I�_�U�R�L� � �}�)�;� � �� � � � �#�#�#� �R�e�a�c�t� �(�V�i�t�e�)� � � � ��b�a�s�h� � �#� �.�e�n�v� � �V�I�T�E�_�D�V�_�A�P�I�_�K�E�Y�=�d�v�_�y�o�u�r�_�a�p�i�_�k�e�y�_�h�e�r�e� � �� � � � ��t�y�p�e�s�c�r�i�p�t� � �c�o�n�s�t� �v�a�u�l�t� �=� �n�e�w� �D�e�c�e�n�t�r�a�V�a�u�l�t�(�i�m�p�o�r�t�.�m�e�t�a�.�e�n�v�.�V�I�T�E�_�D�V�_�A�P�I�_�K�E�Y�)�;� � �� � � � �#�#�#� �C�r�e�a�t�e� �R�e�a�c�t� �A�p�p� � � � ��b�a�s�h� � �#� �.�e�n�v� � �R�E�A�C�T�_�A�P�P�_�D�V�_�A�P�I�_�K�E�Y�=�d�v�_�y�o�u�r�_�a�p�i�_�k�e�y�_�h�e�r�e� � �� � � � ��t�y�p�e�s�c�r�i�p�t� � �c�o�n�s�t� �v�a�u�l�t� �=� �n�e�w� �D�e�c�e�n�t�r�a�V�a�u�l�t�(�p�r�o�c�e�s�s�.�e�n�v�.�R�E�A�C�T�_�A�P�P�_�D�V�_�A�P�I�_�K�E�Y�!�)�;� � �� � � � �>� ��&� ��N�e�v�e�r� �c�o�m�m�i�t� ��.�e�n�v�� �f�i�l�e�s� �o�r� �h�a�r�d�c�o�d�e� �A�P�I� �k�e�y�s� �i�n� �c�l�i�e�n�t�-�s�i�d�e� �c�o�d�e�.�� �F�o�r� �b�r�o�w�s�e�r� �a�p�p�s�,� �p�r�o�x�y� �u�p�l�o�a�d�/�d�o�w�n�l�o�a�d� �t�h�r�o�u�g�h� �y�o�u�r� �o�w�n� �b�a�c�k�e�n�d� �a�n�d� �k�e�e�p� �t�h�e� ��D�V�_�A�P�I�_�K�E�Y�� �s�e�r�v�e�r�-�s�i�d�e� �o�n�l�y�.� � � � �-�-�-� � � � �#�#� �S�e�c�u�r�i�t�y� �M�o�d�e�l� � � � �|� �L�a�y�e�r� �|� �T�e�c�h�n�o�l�o�g�y� �|� �W�h�a�t� �h�a�p�p�e�n�s� �|� � �|�-�-�-�|�-�-�-�|�-�-�-�|� � �|� ��E�n�c�r�y�p�t�i�o�n�� �|� �A�E�S�-�2�5�6�-�G�C�M� �|� �F�i�l�e� �e�n�c�r�y�p�t�e�d� �b�e�f�o�r�e� �u�p�l�o�a�d� � �u�n�i�q�u�e� �k�e�y� �p�e�r� �f�i�l�e� �|� � �|� ��K�e�y� �s�t�o�r�a�g�e�� �|� �S�e�r�v�e�r�-�s�i�d�e� �w�r�a�p�p�i�n�g� �|� �P�e�r�-�f�i�l�e� �k�e�y� �w�r�a�p�p�e�d� �w�i�t�h� �m�a�s�t�e�r� �k�e�y� � �r�a�w� �k�e�y� �n�e�v�e�r� �p�e�r�s�i�s�t�e�d� �|� � �|� ��I�P�F�S� �u�p�l�o�a�d�� �|� �P�i�n�a�t�a� �|� �O�n�l�y� �e�n�c�r�y�p�t�e�d� �b�y�t�e�s� �s�t�o�r�e�d� � �f�i�l�e�n�a�m�e� �i�s� �a� �S�H�A�-�2�5�6� �h�a�s�h� �|� � �|� ��I�n�t�e�g�r�i�t�y� �p�r�o�o�f�� �|� �P�o�l�y�g�o�n� �b�l�o�c�k�c�h�a�i�n� �|� �S�H�A�-�2�5�6� �o�f� �e�n�c�r�y�p�t�e�d� �b�y�t�e�s� �a�n�c�h�o�r�e�d� �o�n�-�c�h�a�i�n� � �i�m�m�u�t�a�b�l�e� �|� � �|� ��D�e�c�r�y�p�t�i�o�n�� �|� �W�e�b� �C�r�y�p�t�o� �A�P�I� �(�S�D�K�)� �|� �D�e�c�r�y�p�t�i�o�n� �r�u�n�s� �i�n�s�i�d�e� �t�h�e� �S�D�K� �o�n� �t�h�e� �c�a�l�l�e�r�'�s� �m�a�c�h�i�n�e� �|� � � � ��Z�e�r�o�-�K�n�o�w�l�e�d�g�e� �G�u�a�r�a�n�t�e�e�� � � � �E�v�e�n� �i�f� �D�e�c�e�n�t�r�a�V�a�u�l�t� �s�e�r�v�e�r�s�,� �P�i�n�a�t�a�,� �o�r� �I�P�F�S� �n�o�d�e�s� �a�r�e� �f�u�l�l�y� �c�o�m�p�r�o�m�i�s�e�d�,� �a�n� �a�t�t�a�c�k�e�r� �g�e�t�s� �o�n�l�y� �e�n�c�r�y�p�t�e�d� �b�y�t�e�s� �a�n�d� �o�p�a�q�u�e� �h�a�s�h�e�s�.� �W�i�t�h�o�u�t� �t�h�e� �m�a�s�t�e�r� �e�n�c�r�y�p�t�i�o�n� �k�e�y� � �w�h�i�c�h� �n�e�v�e�r� �l�e�a�v�e�s� �y�o�u�r� �s�e�r�v�e�r� �i�n�f�r�a�s�t�r�u�c�t�u�r�e� � �n�o� �f�i�l�e� �c�o�n�t�e�n�t� �i�s� �r�e�c�o�v�e�r�a�b�l�e�.� � � � �T�h�e� �b�l�o�c�k�c�h�a�i�n� �a�n�c�h�o�r� �p�r�o�v�i�d�e�s� ��t�a�m�p�e�r� �e�v�i�d�e�n�c�e��:� �i�f� �a�n�y�o�n�e� �m�o�d�i�f�i�e�s� �t�h�e� �e�n�c�r�y�p�t�e�d� �b�y�t�e�s� �o�n� �I�P�F�S�,� �t�h�e� �S�H�A�-�2�5�6� �h�a�s�h� �w�i�l�l� �n�o� �l�o�n�g�e�r� �m�a�t�c�h� �t�h�e� �o�n�-�c�h�a�i�n� �r�e�c�o�r�d�,� �a�n�d� ��v�e�r�i�f�y�(�)�� �/� ��r�e�t�r�i�e�v�e�(�)�� �w�i�l�l� �f�l�a�g� �i�t� �i�m�m�e�d�i�a�t�e�l�y�.� � � � �-�-�-� � � � �#�#� �R�e�q�u�i�r�e�m�e�n�t�s� � � � ��N�o�d�e�.�j�s�� � �-� �N�o�d�e�.�j�s� �1�8� �o�r� �l�a�t�e�r� �(�u�s�e�s� �n�a�t�i�v�e� ��f�e�t�c�h�� �a�n�d� ��c�r�y�p�t�o�.�s�u�b�t�l�e��)� � � � ��B�r�o�w�s�e�r�� � �-� �C�h�r�o�m�e� �8�5�+� �/� �E�d�g�e� �8�5�+� � �-� �F�i�r�e�f�o�x� �9�0�+� � �-� �S�a�f�a�r�i� �1�5�+� � � � �>� �T�h�e� �S�D�K� �h�a�s� ��z�e�r�o� �n�p�m� �d�e�p�e�n�d�e�n�c�i�e�s�� � �i�t� �r�e�l�i�e�s� �o�n�l�y� �o�n� �p�l�a�t�f�o�r�m�-�n�a�t�i�v�e� �W�e�b� �A�P�I�s�.� � � � �-�-�-� � � � �#�#� �C�h�a�n�g�e�l�o�g� � � � �#�#�#� �0�.�1�.�0� � �I�n�i�t�i�a�l� �R�e�l�e�a�s�e� � �-� ��u�p�l�o�a�d��,� ��r�e�t�r�i�e�v�e��,� ��v�e�r�i�f�y��,� ��l�i�s�t��,� ��d�e�l�e�t�e��,� ��w�a�i�t�F�o�r�B�l�o�c�k�c�h�a�i�n�� � �-� �A�E�S�-�2�5�6�-�G�C�M� �c�l�i�e�n�t�-�s�i�d�e� �d�e�c�r�y�p�t�i�o�n� �v�i�a� �W�e�b� �C�r�y�p�t�o� �A�P�I� � �-� �C�J�S� �+� �E�S�M� �+� �T�y�p�e�S�c�r�i�p�t� �d�e�c�l�a�r�a�t�i�o�n� �f�i�l�e�s� � �-� �Z�e�r�o� �d�e�p�e�n�d�e�n�c�i�e�s� � � � �-�-�-� � � � �#�#� �L�i�c�e�n�s�e� � � � �M�I�T� ��� �D�e�c�e�n�t�r�a�V�a�u�l�t� � �