1 Objetivos

  • Describir las características del sistema Modelo Pronóstico de Producción

  • Mostrar los resultados del sistema aplicado a un campo activo productor de petróleo en México

  • Utilizar como referencia el Dictamen Técnico de la modificación al Plan de Desarrollo para la Extracción de Hidrocarburos Campo Rabasa a fin de visualizar la utilidad del modelo de pronóstico de producción. Ver link Dictamen Técnico

2 Aspectos generales del sistema

En términos muy generales, el sistema utiliza los datos de producción del campo y/o pozos para generar a través de un algoritmo matemático, un Modelo del Pronóstico de Producción.

Las estimaciones se realizan en dos modalidades y generan los siguientes resultados:

  • Modelo pronóstico de producción del campo
  • Modelo pronóstico de producción para cada pozo del campo

Visto que los datos utilizados por el sistema corresponden a la producción de petróleo de los pozos y/o el campo, las estimaciones generadas corresponden a las reservas probadas desarrolladas definidas como: volumen que se espera recuperar de los pozos e instalaciones existentes Ver link PRMS

Por otra parte, el sistema toma en cuenta el estatus de producción de los pozos y los clasifica como:

  • Activos

    Pozos con producción a la fecha de realización del análisis

  • Cerrados

    Pozos con producción histórica y cerrados a la fecha de realización del análisis

Finalmente, dependiendo del estatus de los pozos, los volúmenes estimados por el sistema para cada pozo se subclasifican en:

  • Reservas probadas desarrolladas produciendo

    Se refiere a las estimaciones de reservas asociadas a los pozos activos, es decir aquellos con producción a la fecha de realización del análisis

  • Reservas probadas desarrolladas no produciendo

    Comprende las estimaciones de reservas asociadas a los pozos cerrados

3 Campo Rabasa

3.1 Aspectos generales del campo

En el siguiente texto se describen algunos del campo, así como detalles del Plan de Desarrollo de Extracción. Ver link Plan de Desarrollo de Extracción

"La Comisión Nacional de Hidrocarburos (CNH) aprobó a Petróleos Mexicanos (Pemex) la modificación del Plan de Desarrollo de Extracción en la asignación A-0284-2M-Campo Rabasa, localizado entre la zona rural de Coatzacoalcos y, mayormente, en Agua Dulce, donde se contempla una inversión de 513.6 millones de dólares al contemplar 11 perforaciones.

De acuerdo con la CNH, la inversión total será de 513.6 millones de dólares, de los cuales 386.6 millones de dólares corresponderán a la inversión y 127 millones de dólares para los gastos de operación, ya que con ello se contempla recuperar 26.71 millones de barriles de aceite y 33.03 mil millones de pies cúbicos de gas.

La modificación aprobada en la quinta sesión extraordinaria de la CNH a la subsidiaria Pemex Exploración y Producción contempla 11 perforaciones, 72 reparaciones mayores, 270 reparaciones menores y 80 taponamientos, además de actualizaciones al Programa de Aprovechamiento de Gas Natural Asociado (PAGNA), incremento de la producción y un programa de recuperación secundaria para la inyección de agua.

Es preciso mencionar que el Campo Rabasa se ubica a siete kilómetros al oeste de Agua Dulce, donde hasta el momento hay 83 pozos perforados con aceite de 24 grados API, en un área de 96.59 kilómetros cuadrados".

Las reservas a recuperar con este Plan de Desarrollo de Extracción son 26.71 millones de barriles de aceite (mmb)

3.2 Resultado Modelo pronóstico de producción

Una vez utilizado el sistema, los resultados del modelo pronóstico de producción se muestran en la siguiente tabla:

  • Producción: producción acumulada de petróleo a la fecha de realización del análisis

  • Pronóstico de producción: pronóstico de producción generado por el sistema

  • Reservas probadas desarrolladas

  • Fuente de los datos de producción: CNH

La datos de producción fueron obtenidos de la pagina web de la Comisión Nacional de Hidrocarburos de México (CNH) y todas las unidades están expresadas en millones de barriles (mmb)

Field: RABASA
Id Parámetros byField byWells
1 Producción @ 2019-01-01 56.5 47.2
2 Pronóstico de producción @ 2034-01-01 75.8 71.0
3 Reservas probadas desarrolladas 19.3 23.8
Note:
Producción: Producción acumulada de petróleo
Pronóstico de producción: Pronóstico de producción acumulada de petróleo
Reservas probadas desarrolladas
Fuente de los datos de producción: CNH
Todas las unidades están expresadas en millones de barriles (mmb)

3.2.1 Resultados

  • El sistema estima las reservas probadas desarrolladas para el campo y los pozos

  • Reservas probadas desarrolladas (Campo): 19.3 mmb

  • Reservas probadas desarrolladas (Pozos): 23.6 mmb

  • Las reservas a recuperar con el Plan de Desarrollo de Extracción son 26.7 mmb y tienen una correspondencia aproximada con la estimación de las Reservas probadas desarrolladas realizada por el sistema

3.3 Estatus reservas por pozos

Los volúmenes estimados por el sistema usando los pozos se clasifican en:

  • Reservas probadas desarrolladas produciendo
  • Reservas probadas desarrolladas no produciendo

La siguiente tabla se muestran los resultados asociados a los volúmenes estimados usando el estatus de los pozos.

Field: RABASA Reservas probadas desarrolladas @ 2019-01-01
Estatus Reservas Pozos Producción Pronóstico de Producción Reservas
1.Producing 34 35.4 53.9 18.5
2.Non-producing 30 11.7 17.0 5.4
Note:
Producing: Reservas probadas desarrolladas produciendo
Non-producing: Reservas probadas desarrolladas no produciendo
Pozos: Número de pozos
Producción: Producción acumulada de petróleo
Pronóstico de producción: Pronostico de producción acumulada de petróleo
Reservas: Reservas probadas
Todas las unidades están expresadas en millones de barriles

3.3.1 Resultados

  • Producing: Reservas probadas desarrolladas produciendo: 18.5 mmb

  • Non-producing: Reservas probadas desarrolladas no produciendo: 5.4 mmb

4 Comparación Plan Desarrollo vs Pronóstico de Producción

Finalmente, se realiza una comparación del Plan de Desarrollo de Extracción campo Rabasa y los resultados del sistema de pronóstico de producción.

Según el documento Dictamen Técnico de la modificación al Plan de Desarrollo para la Extracción de Hidrocarburos Campo Rabasa Ver link Dictamen Técnico, el volumen a recuperar de aceite para el Plan Modificado 2019-2034 es 20.1 mmb correspondientes a las reservas 2P (probadas mas probables).

Las reservas probadas(1P) al 01 de enero de 2019 son de 18 mmb de aceite.

Nomenclatura:

  • Producción diaria del campo: Producción histórica
  • Plan de producción: Plan de Desarrollo de Extracción
  • Pronóstico de producción: Resultados del sistema de pronóstico de producción

4.0.1 Resultados

  • Las reservas probadas(1P) al 01 de enero de 2019 son de 18 mmb de aceite

  • El Plan de Desarrollo de Extracción incluye el volumen a recuperar de aceite asociado a las reservas 2P por el orden de los 20.1 mmb

  • En términos de la producción diaria, el Plan de Desarrollo de Extracción y el Pronóstico de Producción lucen ligeramente diferentes, sin embargo, se estima que ambos recuperaran un volumen de 20.1 y 18.5 mmb de aceite respectivamente

  • Las reservas probadas desarrolladas produciendo y no produciendo estimadas por el sistema de pronóstico de producción corresponden a 18.5 y 5.4 mmb respectivamente

5 Consideraciones finales

  • El sistema de Pronóstico de Producción permite estimar con cierto grado de confiabilidad, las reservas probadas desarrolladas de un campo activo

  • Dependiendo de la disponibilidad de datos de producción de pozos, se podrían estimar los volúmenes de reservas probadas desarrolladas produciendo y no produciendo

  • Para el caso de los pozos cerrados al momento de efectuar el análisis, se podría estimar sus reservas y posteriormente, realizar un análisis de la factibilidad de ser reincorporado a la producción dependiendo de criterios de rentabilidad

  • El sistema se podría utilizar como una primera aproximación, a fin de estimar el valor remanente de las reservas probadas desarrolladas que representan, una de las partes fundamentales del proceso de análisis de información previa a la toma de la decisión de evaluar, adquirir, participar y/o abandonar un campo

LS0tCnRpdGxlOiAiUHJvbsOzc3RpY28gZGUgUHJvZHVjY2nDs246IENhc28gUmFiYXNhIgpkYXRlOiAiYHIgZm9ybWF0KFN5cy50aW1lKCksICclQiwgJVknKWAiCmF1dGhvcjogIkNvbWVudGFyaW9zLCBkdWRhcyBvIGludGVyw6lzIGVuIHVzYXIgZWwgc2lzdGVtYSBjb250YWN0YXIgPGJyPiBlbWFpbDogIGV1bGVyZW5lcmd5QGdtYWlsLmNvbSA8YnI+IFR3aXR0ZXI6IEBFbmVyZ3lFdWxlciIKb3V0cHV0OiAKICBodG1sX25vdGVib29rOiAKICAgIHRvYzogeWVzCiAgICB0b2NfZmxvYXQ6IHllcwogICAgaGlnaGxpZ2h0OiBoYWRkb2NrCiAgICB0aGVtZTogcmVhZGFibGUKICAgIGNzczogfi9Eb2N1bWVudHMvUi9wZm1fbWFzdGVyLzAyLnNjcmlwcy9zdHlsZS5jc3MKICAgIG51bWJlcl9zZWN0aW9uczogeWVzCi0tLQoKYGBge3IgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRSwgaW5jbHVkZT1GQUxTRX0Kcm0obGlzdCA9IGxzKCkpCiMjIyMKIyMjIy0tLS0tLS0tLS0gbG9hZCBmdW5jdGlvbnMgLS0tLS0tLS0tLQojIyMjCnBhdGhzIDwtICJ+L0RvY3VtZW50cy9SL3BmbV9tYXN0ZXIvMDMuUiIKc2FwcGx5KGxpc3QuZmlsZXMocGF0dGVybiA9ICJbLl1SJCIsIAogICAgICAgICAgICAgICAgICBwYXRoID0gcGF0aHMsIAogICAgICAgICAgICAgICAgICBmdWxsLm5hbWVzID0gVFJVRSksIHNvdXJjZSkKIyMjIwojIyMjLS0tLS0tLS0tLSBsb2FkIGRhdGEgLS0tLS0tLS0tLQojIyMjCndwZCA8LSBsb2FkLmRhdGEoKQpgYGAKCiMgT2JqZXRpdm9zICAgCiAgLSBEZXNjcmliaXIgbGFzIGNhcmFjdGVyw61zdGljYXMgZGVsIHNpc3RlbWEgKipNb2RlbG8gUHJvbsOzc3RpY28gZGUgUHJvZHVjY2nDs24qKiAgICAKICAKICAtIE1vc3RyYXIgbG9zIHJlc3VsdGFkb3MgZGVsIHNpc3RlbWEgYXBsaWNhZG8gYSB1biBjYW1wbyBhY3Rpdm8gcHJvZHVjdG9yIGRlIHBldHLDs2xlbyBlbiBNw6l4aWNvICAKICAKICAtIFV0aWxpemFyIGNvbW8gcmVmZXJlbmNpYSBlbCAqKkRpY3RhbWVuIFTDqWNuaWNvKiogZGUgbGEgbW9kaWZpY2FjacOzbiBhbCBQbGFuIGRlIERlc2Fycm9sbG8gcGFyYSBsYSBFeHRyYWNjacOzbiBkZSBIaWRyb2NhcmJ1cm9zIENhbXBvIFJhYmFzYSBhIGZpbiBkZSB2aXN1YWxpemFyIGxhIHV0aWxpZGFkIGRlbCBtb2RlbG8gZGUgcHJvbsOzc3RpY28gZGUgcHJvZHVjY2nDs24uICBbVmVyIGxpbmsgRGljdGFtZW4gVMOpY25pY29dKGh0dHBzOi8vd3d3LmdvYi5teC9jbXMvdXBsb2Fkcy9hdHRhY2htZW50L2ZpbGUvNTE3MDk5L0RpY3RhbWVuX1RlY25pY29fTVBEX1JBQkFTQS5wZGYpCgojIEFzcGVjdG9zIGdlbmVyYWxlcyBkZWwgc2lzdGVtYSAgICAgCgpFbiB0w6lybWlub3MgbXV5IGdlbmVyYWxlcywgZWwgc2lzdGVtYSB1dGlsaXphIGxvcyAqKmRhdG9zIGRlIHByb2R1Y2Npw7NuIGRlbCBjYW1wbyB5L28gcG96b3MqKiBwYXJhIGdlbmVyYXIgYSB0cmF2w6lzIGRlIHVuIGFsZ29yaXRtbyBtYXRlbcOhdGljbywgdW4gKipNb2RlbG8gZGVsIFByb27Ds3N0aWNvIGRlIFByb2R1Y2Npw7NuKiouCgpMYXMgZXN0aW1hY2lvbmVzIHNlIHJlYWxpemFuIGVuIGRvcyBtb2RhbGlkYWRlcyB5IGdlbmVyYW4gbG9zIHNpZ3VpZW50ZXMgcmVzdWx0YWRvczoKCi0gTW9kZWxvIHByb27Ds3N0aWNvIGRlIHByb2R1Y2Npw7NuIGRlbCBjYW1wbyAgIAotIE1vZGVsbyBwcm9uw7NzdGljbyBkZSBwcm9kdWNjacOzbiBwYXJhIGNhZGEgcG96byBkZWwgY2FtcG8gICAgIAoKVmlzdG8gcXVlIGxvcyBkYXRvcyB1dGlsaXphZG9zIHBvciBlbCBzaXN0ZW1hIGNvcnJlc3BvbmRlbiBhIGxhIHByb2R1Y2Npw7NuIGRlIHBldHLDs2xlbyBkZSBsb3MgcG96b3MgeS9vIGVsIGNhbXBvLCBsYXMgZXN0aW1hY2lvbmVzIGdlbmVyYWRhcyBjb3JyZXNwb25kZW4gYSBsYXMgKipyZXNlcnZhcyBwcm9iYWRhcyBkZXNhcnJvbGxhZGFzKiogZGVmaW5pZGFzIGNvbW86IHZvbHVtZW4gcXVlIHNlIGVzcGVyYSByZWN1cGVyYXIgZGUgbG9zIHBvem9zIGUgaW5zdGFsYWNpb25lcyBleGlzdGVudGVzIFtWZXIgbGluayBQUk1TXShodHRwczovL3d3dy5zcGUub3JnL21lZGlhL2ZpbGVyX3B1YmxpYy8yNC9mZS8yNGZlN2NmMy03YzIzLTQ4NWQtYTk2Ni1lMzI0M2YxZDIwY2UvMjAxOF9zaXN0ZW1hX2RlX2dlcmVuY2lhX2RlX2xvc19yZWN1cnNvc19kZV9wZXRyb2xlb18tX3RyYWR1Y2Npb25fZW5fZXNwYW5vbF8tX3ZmLnBkZikKClBvciBvdHJhIHBhcnRlLCBlbCBzaXN0ZW1hIHRvbWEgZW4gY3VlbnRhIGVsIGVzdGF0dXMgZGUgcHJvZHVjY2nDs24gZGUgbG9zIHBvem9zIHkgbG9zIGNsYXNpZmljYSBjb21vOiAKCiAgLQkqKkFjdGl2b3MqKiAKICAKICAgIFBvem9zIGNvbiBwcm9kdWNjacOzbiBhIGxhIGZlY2hhIGRlIHJlYWxpemFjacOzbiBkZWwgYW7DoWxpc2lzICAKICAgIAogIC0JKipDZXJyYWRvcyoqICAKICAKICAgIFBvem9zIGNvbiBwcm9kdWNjacOzbiBoaXN0w7NyaWNhIHkgY2VycmFkb3MgYSBsYSBmZWNoYSBkZSByZWFsaXphY2nDs24gZGVsIGFuw6FsaXNpcyAgICAgCgpGaW5hbG1lbnRlLCBkZXBlbmRpZW5kbyBkZWwgZXN0YXR1cyBkZSBsb3MgcG96b3MsIGxvcyB2b2zDum1lbmVzIGVzdGltYWRvcyBwb3IgZWwgc2lzdGVtYSBwYXJhIGNhZGEgcG96byBzZSBzdWJjbGFzaWZpY2FuIGVuOiAKCi0gKipSZXNlcnZhcyBwcm9iYWRhcyBkZXNhcnJvbGxhZGFzIHByb2R1Y2llbmRvKiogICAKCiAgICBTZSByZWZpZXJlIGEgbGFzIGVzdGltYWNpb25lcyBkZSByZXNlcnZhcyBhc29jaWFkYXMgYSBsb3MgcG96b3MgKiphY3Rpdm9zKiosIGVzIGRlY2lyIGFxdWVsbG9zIGNvbiBwcm9kdWNjacOzbiBhIGxhIGZlY2hhIGRlIHJlYWxpemFjacOzbiBkZWwgYW7DoWxpc2lzCgotICoqUmVzZXJ2YXMgcHJvYmFkYXMgZGVzYXJyb2xsYWRhcyBubyBwcm9kdWNpZW5kbyoqICAgIAoKICAgIENvbXByZW5kZSBsYXMgZXN0aW1hY2lvbmVzIGRlIHJlc2VydmFzIGFzb2NpYWRhcyBhIGxvcyBwb3pvcyAqKmNlcnJhZG9zKioKCiMgQ2FtcG8gUmFiYXNhICAKCiMjIEFzcGVjdG9zIGdlbmVyYWxlcyBkZWwgY2FtcG8gICAKCkVuIGVsIHNpZ3VpZW50ZSB0ZXh0byBzZSBkZXNjcmliZW4gYWxndW5vcyBkZWwgY2FtcG8sIGFzw60gY29tbyBkZXRhbGxlcyBkZWwgKipQbGFuIGRlIERlc2Fycm9sbG8gZGUgRXh0cmFjY2nDs24qKi4gIFtWZXIgbGluayBQbGFuIGRlIERlc2Fycm9sbG8gZGUgRXh0cmFjY2nDs25dKGh0dHBzOi8vaW1hZ2VuZGVsZ29sZm8ubXgvY29hdHphY29hbGNvcy9pbnZlcnRpcmEtcGVtZXgtNTEzNi1tZGQtZW4tZWwtY2FtcG8tcmFiYXNhLWNuaC81MDA3MDQwNSkKCiJMYSBDb21pc2nDs24gTmFjaW9uYWwgZGUgSGlkcm9jYXJidXJvcyAoQ05IKSBhcHJvYsOzIGEgUGV0csOzbGVvcyBNZXhpY2Fub3MgKFBlbWV4KSBsYSBtb2RpZmljYWNpw7NuIGRlbCAqKlBsYW4gZGUgRGVzYXJyb2xsbyBkZSBFeHRyYWNjacOzbioqIGVuIGxhIGFzaWduYWNpw7NuIEEtMDI4NC0yTS1DYW1wbyBSYWJhc2EsIGxvY2FsaXphZG8gZW50cmUgbGEgem9uYSBydXJhbCBkZSBDb2F0emFjb2FsY29zIHksIG1heW9ybWVudGUsIGVuIEFndWEgRHVsY2UsIGRvbmRlIHNlIGNvbnRlbXBsYSB1bmEgaW52ZXJzacOzbiBkZSA1MTMuNiBtaWxsb25lcyBkZSBkw7NsYXJlcyBhbCBjb250ZW1wbGFyIDExIHBlcmZvcmFjaW9uZXMuCgpEZSBhY3VlcmRvIGNvbiBsYSBDTkgsIGxhIGludmVyc2nDs24gdG90YWwgc2Vyw6EgZGUgNTEzLjYgbWlsbG9uZXMgZGUgZMOzbGFyZXMsIGRlIGxvcyBjdWFsZXMgMzg2LjYgbWlsbG9uZXMgZGUgZMOzbGFyZXMgY29ycmVzcG9uZGVyw6FuIGEgbGEgaW52ZXJzacOzbiB5IDEyNyBtaWxsb25lcyBkZSBkw7NsYXJlcyBwYXJhIGxvcyBnYXN0b3MgZGUgb3BlcmFjacOzbiwgeWEgcXVlIGNvbiBlbGxvIHNlIGNvbnRlbXBsYSByZWN1cGVyYXIgKioyNi43MSBtaWxsb25lcyBkZSBiYXJyaWxlcyBkZSBhY2VpdGUqKiB5IDMzLjAzIG1pbCBtaWxsb25lcyBkZSBwaWVzIGPDumJpY29zIGRlIGdhcy4KCkxhIG1vZGlmaWNhY2nDs24gYXByb2JhZGEgZW4gbGEgcXVpbnRhIHNlc2nDs24gZXh0cmFvcmRpbmFyaWEgZGUgbGEgQ05IIGEgbGEgc3Vic2lkaWFyaWEgUGVtZXggRXhwbG9yYWNpw7NuIHkgUHJvZHVjY2nDs24gY29udGVtcGxhIDExIHBlcmZvcmFjaW9uZXMsIDcyIHJlcGFyYWNpb25lcyBtYXlvcmVzLCAyNzAgcmVwYXJhY2lvbmVzIG1lbm9yZXMgeSA4MCB0YXBvbmFtaWVudG9zLCBhZGVtw6FzIGRlIGFjdHVhbGl6YWNpb25lcyBhbCBQcm9ncmFtYSBkZSBBcHJvdmVjaGFtaWVudG8gZGUgR2FzIE5hdHVyYWwgQXNvY2lhZG8gKFBBR05BKSwgaW5jcmVtZW50byBkZSBsYSBwcm9kdWNjacOzbiB5IHVuIHByb2dyYW1hIGRlIHJlY3VwZXJhY2nDs24gc2VjdW5kYXJpYSBwYXJhIGxhIGlueWVjY2nDs24gZGUgYWd1YS4KCkVzIHByZWNpc28gbWVuY2lvbmFyIHF1ZSBlbCBDYW1wbyBSYWJhc2Egc2UgdWJpY2EgYSBzaWV0ZSBraWzDs21ldHJvcyBhbCBvZXN0ZSBkZSBBZ3VhIER1bGNlLCBkb25kZSBoYXN0YSBlbCBtb21lbnRvIGhheSA4MyBwb3pvcyBwZXJmb3JhZG9zIGNvbiBhY2VpdGUgZGUgMjQgZ3JhZG9zIEFQSSwgZW4gdW4gw6FyZWEgZGUgOTYuNTkga2lsw7NtZXRyb3MgY3VhZHJhZG9zIi4KCkxhcyByZXNlcnZhcyBhIHJlY3VwZXJhciBjb24gZXN0ZSAqKlBsYW4gZGUgRGVzYXJyb2xsbyBkZSBFeHRyYWNjacOzbioqIHNvbiAqKjI2LjcxIG1pbGxvbmVzIGRlIGJhcnJpbGVzIGRlIGFjZWl0ZSAobW1iKSoqICAKCmBgYHtyIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0UsIGluY2x1ZGU9RkFMU0V9CnN0YXJ0X3RpbWUgPC0gU3lzLnRpbWUoKQoKRmllbGQgPC0gInJhYmFzYSIKCiMgZGVmaW5lIFRpdGxlIG9iamVjdApUaXRsZSA9IHBhc3RlKCJDYW1wbzoiLCB0b3VwcGVyKEZpZWxkKSkKCmZhZCA8LSAiMjAxOS0wMS0wMSIgIyBmaWVsZCBhbmFseXNpcyBkYXRlCiMgZmFkIDwtIG1heCh3cGQkZGF0ZSwgbmEucm0gPSBUKQpmcHQgPSAxODAKeW1tZCA9IDMwLjQxNjY3CmBgYAoKCmBgYHtyIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0UsIGluY2x1ZGU9RkFMU0V9CiMjIyMKIyMjIy0tLS0tLS0tLS0gd2VsbCBtb2RlbCAtLS0tLS0tLS0tCiMjIyMKCiMgMS4gU2VsZWN0IHdlbGxzIGZpZWxkIGRhdGEKd2ZkIDwtIHdlbGxzLmZpZWxkLmRhdGEod3BkLCBGaWVsZCkKIyAxLjEgcnVuIGZpZWxkLmFuYWx5c2lzLmRhdGUKd2ZkIDwtIGZpZWxkLmFuYWx5c2lzLmRhdGUod2ZkLCBmYWQpICAKIyAyLiBjYWxjdWxhdGUgUSBieSB3ZWxscwpRYnl3ZWxscyA8LSBRLmJ5LndlbGxzKHdmZCkKIyAzLiBjcmVhdGUgbGlzdCBvZiB3ZWxscwp3bCA8LSBjcmVhdGUud2VsbC5saXN0KFFieXdlbGxzKQojIDQuIGNhbGN1bGF0ZSBudW1iZXIgb2Ygd2VsbHMgYmVmb3JlIG1vZGVsCm53ZWxsc19iNF9uc2wgPSBucm93KHdsKQojIDUuIHJ1biBtYXAgbm9uLWxpbmVhciByZWdyZXNzaW9uIHRvIGxvZ2lzdGljIGdyb3d0aCBtb2RlbAp3bCA8LSBtYXAubmxyLmxnbSh3bCkKIyA2LiByZW1vdmUgd2VsbHMgbW9kZWwgd2l0aCBmYWlsZWQgbW9kZWxzIE5BCndsIDwtIHdsWyFpcy5uYSh3bCRubHNfZml0KSwgXQojIDcuIGNhbGN1bGF0ZSBudW1iZXIgb2Ygd2VsbHMgYWZ0ZXIgbW9kZWwKbndlbGxzX2FmdGVyX25zbCA9IG5yb3cod2wpCiMgOC4gY3JlYXRlIG5scyBwbG90cyBvYmplY3QKbmxzcCA8LSBubHMucGxvdCh3bCkKIyA5LiBjYWxjdWxhdGUgd2VsbCBwcmVkaWN0IHRpbWUKd3B0IDwtIHdlbGwucHJlZGljdC50aW1lKG5sc3AsIGZwdCkKIyAxMC4gY2FsY3VsYXRlIHdlbGwgcHJvZHVjdGlvbiBRZiB2YWx1ZXMKd1FmIDwtIHdlbGwud1FmLnZhbHVlKHdwdCwgd2wpCiMgMTEuIGNhbGN1bGF0ZSB3ZWxsIHByb2R1Y3Rpb24gcWYgdmFsdWVzCndxUWYgPC0gd2VsbC53cVFmLnZhbHVlKHdRZiwgbmxzcCkKIyAxMS4xIHJ1biBmaWVsZC5hY3R1YWwucHJvZHVjdGlvbi5kYXRlIApmYXBkIDwtIGZpZWxkLmFjdHVhbC5wcm9kdWN0aW9uLmRhdGUod3FRZikKIyAxMi4gcnVuIHdlbGwuc3RhdHVzCndlbGxfc3RhdHVzIDwtIHdlbGwuc3RhdHVzKHdxUWYsIGZhcGQpCiMgMTMuIHJ1biBkYXRlLmV4dGVuZCBmdW5jdGlvbgp3cVFmIDwtIGRhdGUuZXh0ZW5kKHdxUWYpIAojIDE0LiBydW4gZmllbGQuZGF0ZS5tb2RlbC5leHRlbmQKZmRtZSA8LSBmaWVsZC5kYXRlLm1vZGVsLmV4dGVuZCh3cVFmKQojIDE1LiBjYWxjdWxhdGUgbmxzIG1vZGVsIHBhcmFtZXRlcnMgZm9yIGVhY2ggd2VsbCAKbmxzcHcgPC0gbmxzLnBhcm0ud2VsbCh3bCkKIyAxNi4gcnVuIHdlbGwuc3RhdHVzLnN1bSAgIAp3ZWxsX3N0YXR1c19zdW0gPC0gd2VsbC5zdGF0dXMuc3VtKHdlbGxfc3RhdHVzKSAgICAKCiMjIyMKIyMjIy0tLS0tLS0tLS0gZmllbGQgbW9kZWwgLS0tLS0tLS0tLQojIyMjIAojIDEuIFNlbGVjdCB3ZWxscyBmaWVsZCBkYXRhCndmZCA8LSB3ZWxscy5maWVsZC5kYXRhKHdwZCwgRmllbGQpCiMgMS4xIHJ1biBmaWVsZC5hbmFseXNpcy5kYXRlICAgY2hlY2sgwqHCocKhwqEKIyB3ZmQgPC0gZmllbGQuYW5hbHlzaXMuZGF0ZSh3ZmQsIGZhZCkKIyAyLiBDYWxjdWxhdGUgUSBieSBmaWVsZApRYnlmaWVsZCA8LSBRLmJ5LmZpZWxkLjEod2ZkKQpRYnlmaWVsZCA8LSBRLmJ5LmZpZWxkLjIoUWJ5ZmllbGQpCiMgMy4gcnVuIG5sci5sZ20KbmxzX2ZpZWxkIDwtIG5sci5sZ20oUWJ5ZmllbGQpCiMgNC4gcnVuIFFmLnFmCmZ0d3YgPC0gUWYucWYoUWJ5ZmllbGQsIG5sc19maWVsZCwgZnB0KQojIDUuIHJ1biBmaWxsLnZhcgpmdHd2IDwtIGZpbGwudmFyKGZ0d3YsIFFieWZpZWxkKQojIDYuIHJ1biBxZSB0YWlsCnFlID0gcWUudGFpbChmdHd2JHFmLCAyKSAgCmBgYAoKIyMgUmVzdWx0YWRvICoqTW9kZWxvIHByb27Ds3N0aWNvIGRlIHByb2R1Y2Npw7NuKiogICAgCgpVbmEgdmV6IHV0aWxpemFkbyBlbCBzaXN0ZW1hLCBsb3MgcmVzdWx0YWRvcyBkZWwgbW9kZWxvIHByb27Ds3N0aWNvIGRlIHByb2R1Y2Npw7NuIHNlIG11ZXN0cmFuIGVuIGxhIHNpZ3VpZW50ZSB0YWJsYTogIAoKLSBQcm9kdWNjacOzbjogcHJvZHVjY2nDs24gYWN1bXVsYWRhIGRlIHBldHLDs2xlbyBhIGxhIGZlY2hhIGRlIHJlYWxpemFjacOzbiBkZWwgYW7DoWxpc2lzICAKCi0gUHJvbsOzc3RpY28gZGUgcHJvZHVjY2nDs246IHByb27Ds3N0aWNvIGRlIHByb2R1Y2Npw7NuIGdlbmVyYWRvIHBvciBlbCBzaXN0ZW1hICAgICAKCi0gUmVzZXJ2YXMgcHJvYmFkYXMgZGVzYXJyb2xsYWRhcyAgIAoKLSBGdWVudGUgZGUgbG9zIGRhdG9zIGRlIHByb2R1Y2Npw7NuOiBDTkggIAoKTGEgZGF0b3MgZGUgcHJvZHVjY2nDs24gZnVlcm9uIG9idGVuaWRvcyBkZSBsYSBwYWdpbmEgd2ViIGRlIGxhIENvbWlzacOzbiBOYWNpb25hbCBkZSBIaWRyb2NhcmJ1cm9zIGRlIE3DqXhpY28gKENOSCkgeSB0b2RhcyBsYXMgdW5pZGFkZXMgZXN0w6FuIGV4cHJlc2FkYXMgZW4gbWlsbG9uZXMgZGUgYmFycmlsZXMgKG1tYikgICAKCmBgYHtyIGVjaG89RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9CiMjIyMKIyMjIy0tLS0tLS0tLS0gU3VtbWFyaXplIG1vZGVsIC0tLS0tLS0tLS0KIyMjIyAKc3VtbWFyaXplLm1vZGVsKGZ0d3YsIHdxUWYpICAKCiMgKipgciBucm93KGQzKSBgKioKYGBgCiMjIyBSZXN1bHRhZG9zICAgCgotIEVsIHNpc3RlbWEgZXN0aW1hIGxhcyByZXNlcnZhcyBwcm9iYWRhcyBkZXNhcnJvbGxhZGFzIHBhcmEgZWwgY2FtcG8geSBsb3MgcG96b3MgIAoKLSBSZXNlcnZhcyBwcm9iYWRhcyBkZXNhcnJvbGxhZGFzIChDYW1wbyk6ICoqMTkuMyoqIG1tYiAgICAKCi0gUmVzZXJ2YXMgcHJvYmFkYXMgZGVzYXJyb2xsYWRhcyAoUG96b3MpOiAqKjIzLjYqKiBtbWIgIAoKLSBMYXMgcmVzZXJ2YXMgYSByZWN1cGVyYXIgY29uIGVsICoqUGxhbiBkZSBEZXNhcnJvbGxvIGRlIEV4dHJhY2Npw7NuKiogc29uICoqMjYuNyBtbWIqKiB5IHRpZW5lbiB1bmEgY29ycmVzcG9uZGVuY2lhIGFwcm94aW1hZGEgY29uIGxhIGVzdGltYWNpw7NuIGRlIGxhcyAqKlJlc2VydmFzIHByb2JhZGFzIGRlc2Fycm9sbGFkYXMqKiByZWFsaXphZGEgcG9yIGVsIHNpc3RlbWEgIAoKIyMgRXN0YXR1cyByZXNlcnZhcyBwb3IgcG96b3MgICAgCgpMb3Mgdm9sw7ptZW5lcyBlc3RpbWFkb3MgcG9yIGVsIHNpc3RlbWEgdXNhbmRvIGxvcyBwb3pvcyBzZSBjbGFzaWZpY2FuIGVuOgoKLSAqKlJlc2VydmFzIHByb2JhZGFzIGRlc2Fycm9sbGFkYXMgcHJvZHVjaWVuZG8qKiAgIAotICoqUmVzZXJ2YXMgcHJvYmFkYXMgZGVzYXJyb2xsYWRhcyBubyBwcm9kdWNpZW5kbyoqICAgCgpMYSBzaWd1aWVudGUgdGFibGEgc2UgbXVlc3RyYW4gbG9zIHJlc3VsdGFkb3MgYXNvY2lhZG9zIGEgbG9zIHZvbMO6bWVuZXMgZXN0aW1hZG9zIHVzYW5kbyBlbCBlc3RhdHVzIGRlIGxvcyBwb3pvcy4gCgpgYGB7ciBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQojIyMjCiMjIyMtLS0tLS0tLS0tIFdlbGwgc3RhdHVzIC0tLS0tLS0tLS0KIyMjIyAKCiMjIDIyLjMgcHJpbnQud2VsbC5zdGF0dXMuc3VtCgp0aXRsZSA8LSBwYXN0ZSgiRmllbGQ6IiwgCiAgICAgICAgICAgICAgIHRvdXBwZXIoRmllbGQpLCAiUmVzZXJ2YXMgcHJvYmFkYXMgZGVzYXJyb2xsYWRhcyIsICJAIiwgZmFwZCkKZHVtIDwtIHdlbGxfc3RhdHVzX3N1bSAlPiUKICByZW5hbWUoIkVzdGF0dXMgUmVzZXJ2YXMiID0gIlJlc2VydmVzLlN0YXR1cyIsCiAgICAgICAgIFBvem9zID0gIldlbGxzIiwKICAgICAgICAgUHJvZHVjY2nDs24gPSAiUHJvZHVjdGlvbiIsCiAgICAgICAgICJQcm9uw7NzdGljbyBkZSBQcm9kdWNjacOzbiIgID0gIkZvcmVjYXN0LlByb2R1Y3Rpb24iLAogICAgICAgICBSZXNlcnZhcyA9ICJSZXNlcnZlcyIpCgpkdW0gPC0gZHVtWzE6MixdCgpwcmludC50YWJsZShkdW0sIAogICAgICAgICAgICB0aXRsZSwgMSwgCiAgICAgICAgICAgICJQcm9kdWNpbmc6IFJlc2VydmFzIHByb2JhZGFzIGRlc2Fycm9sbGFkYXMgcHJvZHVjaWVuZG8gCiAgICAgICAgICAgIE5vbi1wcm9kdWNpbmc6IFJlc2VydmFzIHByb2JhZGFzIGRlc2Fycm9sbGFkYXMgbm8gcHJvZHVjaWVuZG8gCiAgICAgICAgICAgIFBvem9zOiBOw7ptZXJvIGRlIHBvem9zCiAgICAgICAgICAgIFByb2R1Y2Npw7NuOiBQcm9kdWNjacOzbiBhY3VtdWxhZGEgZGUgcGV0csOzbGVvCiAgICAgICAgICAgIFByb27Ds3N0aWNvIGRlIHByb2R1Y2Npw7NuOiBQcm9ub3N0aWNvIGRlIHByb2R1Y2Npw7NuIGFjdW11bGFkYSBkZSBwZXRyw7NsZW8KICAgICAgICAgICAgUmVzZXJ2YXM6IFJlc2VydmFzIHByb2JhZGFzICAKICAgICAgICAgICAgVG9kYXMgbGFzIHVuaWRhZGVzIGVzdMOhbiBleHByZXNhZGFzIGVuIG1pbGxvbmVzIGRlIGJhcnJpbGVzIikKYGBgCgojIyMgUmVzdWx0YWRvcwoKLSAqKlByb2R1Y2luZyoqOiBSZXNlcnZhcyBwcm9iYWRhcyBkZXNhcnJvbGxhZGFzIHByb2R1Y2llbmRvOiAqKjE4LjUqKiBtbWIgICAgCgotICoqTm9uLXByb2R1Y2luZyoqOiBSZXNlcnZhcyBwcm9iYWRhcyBkZXNhcnJvbGxhZGFzIG5vIHByb2R1Y2llbmRvOiAqKjUuNCoqIG1tYiAgCgojIENvbXBhcmFjacOzbiBQbGFuIERlc2Fycm9sbG8gdnMgUHJvbsOzc3RpY28gZGUgUHJvZHVjY2nDs24gIAoKRmluYWxtZW50ZSwgc2UgcmVhbGl6YSB1bmEgY29tcGFyYWNpw7NuIGRlbCBQbGFuIGRlIERlc2Fycm9sbG8gZGUgRXh0cmFjY2nDs24gY2FtcG8gUmFiYXNhIHkgbG9zIHJlc3VsdGFkb3MgZGVsIHNpc3RlbWEgZGUgcHJvbsOzc3RpY28gZGUgcHJvZHVjY2nDs24uCgpTZWfDum4gZWwgZG9jdW1lbnRvICoqRGljdGFtZW4gVMOpY25pY28qKiBkZSBsYSBtb2RpZmljYWNpw7NuIGFsIFBsYW4gZGUgRGVzYXJyb2xsbyBwYXJhIGxhIEV4dHJhY2Npw7NuIGRlIEhpZHJvY2FyYnVyb3MgQ2FtcG8gUmFiYXNhIFtWZXIgbGluayBEaWN0YW1lbiBUw6ljbmljb10oaHR0cHM6Ly93d3cuZ29iLm14L2Ntcy91cGxvYWRzL2F0dGFjaG1lbnQvZmlsZS81MTcwOTkvRGljdGFtZW5fVGVjbmljb19NUERfUkFCQVNBLnBkZiksIGVsIHZvbHVtZW4gYSByZWN1cGVyYXIgZGUgYWNlaXRlIHBhcmEgZWwgUGxhbiBNb2RpZmljYWRvIDIwMTktMjAzNCBlcyAqKjIwLjEgbW1iKiogY29ycmVzcG9uZGllbnRlcyBhIGxhcyByZXNlcnZhcyAyUCAocHJvYmFkYXMgbWFzIHByb2JhYmxlcykuICAKCkxhcyByZXNlcnZhcyBwcm9iYWRhcygxUCkgYWwgMDEgZGUgZW5lcm8gZGUgMjAxOSBzb24gZGUgKioxOCoqIG1tYiBkZSBhY2VpdGUuCgoqKk5vbWVuY2xhdHVyYToqKiAgCgotIFByb2R1Y2Npw7NuIGRpYXJpYSBkZWwgY2FtcG86IFByb2R1Y2Npw7NuIGhpc3TDs3JpY2EgICAgICAgIAotIFBsYW4gZGUgcHJvZHVjY2nDs246IFBsYW4gZGUgRGVzYXJyb2xsbyBkZSBFeHRyYWNjacOzbiAgICAKLSBQcm9uw7NzdGljbyBkZSBwcm9kdWNjacOzbjogUmVzdWx0YWRvcyBkZWwgc2lzdGVtYSBkZSBwcm9uw7NzdGljbyBkZSBwcm9kdWNjacOzbiAgICAgIAoKYGBge3IgZWNobz1GQUxTRSwgZmlnLmhlaWdodD03LCBmaWcud2lkdGg9NywgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRX0KIyMjIwojIyMjLS0tLS0tLS0tLSBQRVAgcGxhbiAtLS0tLS0tLS0tCiMjIyMgCiMgcGVwIHBsYW4gIAp5ZWFyIDwtIGMoMjAxOToyMDM0KQpxX3BlcCA8LSBjKDExLjksMTIuMiw4LjIsNi4xLDQuNiwzLjEsMi4zLDEuNCwKICAgICAgICAgICAxLjAsMS4xLDAuOSwwLjcsMC40LDAuNSwwLjUsMC4yKQoKcGVwIDwtIHRpYmJsZShpZCA9ICJwZXAiLCB5ZWFyLCBxX3BlcCkgJT4lIAogICAgICAgIG11dGF0ZShkYXRlID0gcGFzdGUoeWVhciwgIjAxLTAxIiksCiAgICAgICAgICAgICAgIGRhdGUgPSB5bWQoZGF0ZSkpCgpvdXQgPC0gcGxhbi5jb21wKHBlcCkKCnAxIDwtIG91dCRwMQpwbGFuIDwtIG91dCRwbGFuCnAxICsgCiAgZ2VvbV92bGluZSh4aW50ZXJjZXB0ID0gYXMubnVtZXJpYyhhcy5EYXRlKG1heCh3ZmQkZGF0ZSwgbmEucm0gPSBUKSkpKSArICAKICBhbm5vdGF0ZSgidGV4dCIsIAogICAgICAgICAgIHggPSBhcy5EYXRlKCIyMDI2LTEyLTAxIiksIAogICAgICAgICAgIHkgPSAxMCwgCiAgICAgICAgICAgbGFiZWwgPSAiUHJvbsOzc3RpY28gXG5Qcm9kdWNjacOzbiIsCiAgICAgICAgICAgc2l6ZSA9IDcsCiAgICAgICAgICAgY29sb3IgPSAiYmx1ZSIsCiAgICAgICAgICAgZm9udGZhY2UgPSAiYm9sZCIpICsKICBhbm5vdGF0ZSgidGV4dCIsIAogICAgICAgICAgIHggPSBhcy5EYXRlKCIyMDE1LTEyLTAxIiksIAogICAgICAgICAgIHkgPSA1LCAKICAgICAgICAgICBsYWJlbCA9ICJQcm9kdWNjacOzbiBcbkhpc3TDs3JpY2EiLAogICAgICAgICAgIHNpemUgPSA3LAogICAgICAgICAgIGNvbG9yID0gImRhcmtncmVlbiIsCiAgICAgICAgICAgZm9udGZhY2UgPSAiYm9sZCIpICAKYGBgCgojIyMgUmVzdWx0YWRvcwoKLSBMYXMgcmVzZXJ2YXMgcHJvYmFkYXMoMVApIGFsIDAxIGRlIGVuZXJvIGRlIDIwMTkgc29uIGRlICoqMTgqKiBtbWIgZGUgYWNlaXRlICAgCgotIEVsIFBsYW4gZGUgRGVzYXJyb2xsbyBkZSBFeHRyYWNjacOzbiBpbmNsdXllIGVsIHZvbHVtZW4gYSByZWN1cGVyYXIgZGUgYWNlaXRlIGFzb2NpYWRvIGEgbGFzIHJlc2VydmFzIDJQIHBvciBlbCBvcmRlbiBkZSBsb3MgKioyMC4xKiogbW1iCgotIEVuIHTDqXJtaW5vcyBkZSBsYSBwcm9kdWNjacOzbiBkaWFyaWEsIGVsICoqUGxhbiBkZSBEZXNhcnJvbGxvIGRlIEV4dHJhY2Npw7NuKiogeSBlbCAqKlByb27Ds3N0aWNvIGRlIFByb2R1Y2Npw7NuKiogbHVjZW4gbGlnZXJhbWVudGUgZGlmZXJlbnRlcywgc2luIGVtYmFyZ28sIHNlIGVzdGltYSBxdWUgYW1ib3MgcmVjdXBlcmFyYW4gdW4gdm9sdW1lbiBkZSAqKjIwLjEqKiB5ICoqMTguNSoqIG1tYiBkZSBhY2VpdGUgcmVzcGVjdGl2YW1lbnRlCgotIExhcyByZXNlcnZhcyBwcm9iYWRhcyBkZXNhcnJvbGxhZGFzIHByb2R1Y2llbmRvIHkgbm8gcHJvZHVjaWVuZG8gZXN0aW1hZGFzIHBvciBlbCBzaXN0ZW1hIGRlIHByb27Ds3N0aWNvIGRlIHByb2R1Y2Npw7NuIGNvcnJlc3BvbmRlbiBhICoqMTguNSoqIHkgKio1LjQqKiBtbWIgcmVzcGVjdGl2YW1lbnRlICAKCiMgQ29uc2lkZXJhY2lvbmVzIGZpbmFsZXMgIAoKICAtIEVsIHNpc3RlbWEgZGUgKipQcm9uw7NzdGljbyBkZSBQcm9kdWNjacOzbioqIHBlcm1pdGUgZXN0aW1hciBjb24gY2llcnRvIGdyYWRvIGRlIGNvbmZpYWJpbGlkYWQsIGxhcyAqKnJlc2VydmFzIHByb2JhZGFzIGRlc2Fycm9sbGFkYXMqKiBkZSB1biBjYW1wbyBhY3Rpdm8gICAKCiAgLSBEZXBlbmRpZW5kbyBkZSBsYSBkaXNwb25pYmlsaWRhZCBkZSBkYXRvcyBkZSBwcm9kdWNjacOzbiBkZSBwb3pvcywgc2UgcG9kcsOtYW4gZXN0aW1hciBsb3Mgdm9sw7ptZW5lcyBkZSByZXNlcnZhcyBwcm9iYWRhcyBkZXNhcnJvbGxhZGFzIHByb2R1Y2llbmRvIHkgbm8gcHJvZHVjaWVuZG8KCiAgLSBQYXJhIGVsIGNhc28gZGUgbG9zIHBvem9zIGNlcnJhZG9zIGFsIG1vbWVudG8gZGUgZWZlY3R1YXIgZWwgYW7DoWxpc2lzLCBzZSBwb2Ryw61hICBlc3RpbWFyIHN1cyByZXNlcnZhcyB5IHBvc3Rlcmlvcm1lbnRlLCByZWFsaXphciB1biBhbsOhbGlzaXMgZGUgbGEgZmFjdGliaWxpZGFkIGRlIHNlciByZWluY29ycG9yYWRvIGEgbGEgcHJvZHVjY2nDs24gZGVwZW5kaWVuZG8gZGUgY3JpdGVyaW9zIGRlIHJlbnRhYmlsaWRhZCAKICAKIC0gRWwgc2lzdGVtYSBzZSBwb2Ryw61hIHV0aWxpemFyIGNvbW8gdW5hIHByaW1lcmEgYXByb3hpbWFjacOzbiwgYSBmaW4gZGUgZXN0aW1hciBlbCB2YWxvciByZW1hbmVudGUgZGUgbGFzIHJlc2VydmFzIHByb2JhZGFzIGRlc2Fycm9sbGFkYXMgcXVlIHJlcHJlc2VudGFuLCB1bmEgZGUgbGFzIHBhcnRlcyBmdW5kYW1lbnRhbGVzIGRlbCBwcm9jZXNvIGRlIGFuw6FsaXNpcyBkZSBpbmZvcm1hY2nDs24gcHJldmlhIGEgbGEgdG9tYSBkZSBsYSBkZWNpc2nDs24gZGUgKipldmFsdWFyKiosICoqYWRxdWlyaXIqKiwgKipwYXJ0aWNpcGFyKiogeS9vICoqYWJhbmRvbmFyKiogdW4gY2FtcG8KCmBgYHtyIGV2YWw9RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0UsIGluY2x1ZGU9RkFMU0V9CmVuZF90aW1lIDwtIFN5cy50aW1lKCkKZW5kX3RpbWUgLSBzdGFydF90aW1lCmBgYAo=