6101406040523480156200001257600080fd5b506040518060400160405280600e81526020016d5065706520446f6765204b696e6760901b81525080604051806040016040528060018152602001603160f81b8152506040518060400160405280600e81526020016d5065706520446f6765204b696e6760901b8152506040518060400160405280600681526020016550455045444b60d01b8152508160039081620000ac919062000852565b506004620000bb828262000852565b505050620000d8620000d26200019a60201b60201c565b6200019e565b815160209283012081519183019190912060e08290526101008190524660a0818152604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f818801819052818301969096526060810194909452608080850193909352308483018190528151808603909301835260c094850190915281519190950120905291909152610120525062000194336200017b6012600a62000a31565b6200018e90660273eeeed8880062000a42565b620001f0565b62000a88565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6200020782826200020b60201b62000b4a1760201c565b5050565b620002228282620002c260201b62000bda1760201c565b6001600160e01b03620002366200038f8216565b1115620002a35760405162461bcd60e51b815260206004820152603060248201527f4552433230566f7465733a20746f74616c20737570706c79207269736b73206f60448201526f766572666c6f77696e6720766f74657360801b60648201526084015b60405180910390fd5b620002bc600a62000ca56200039560201b1783620003ac565b50505050565b6001600160a01b0382166200031a5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016200029a565b80600260008282546200032e919062000a5c565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3620002076000838362000543565b60025490565b6000620003a3828462000a5c565b90505b92915050565b825460009081908181156200040c57620003db87620003cd60018562000a72565b600091825260209091200190565b60408051808201909152905463ffffffff8116825264010000000090046001600160e01b0316602082015262000421565b60408051808201909152600080825260208201525b905080602001516001600160e01b031693506200043f84868860201c565b9250600082118015620004585750805163ffffffff1643145b15620004af5762000474836200055b60201b62000cb11760201c565b6200048688620003cd60018662000a72565b80546001600160e01b03929092166401000000000263ffffffff90921691909117905562000534565b866040518060400160405280620004d143620005ca60201b62000d1e1760201c565b63ffffffff168152602001620004f2866200055b60201b62000cb11760201c565b6001600160e01b0390811690915282546001810184556000938452602093849020835194909301519091166401000000000263ffffffff909316929092179101555b5050935093915050565b505050565b6200053e8383836200063160201b62000d831760201c565b60006001600160e01b03821115620005c65760405162461bcd60e51b815260206004820152602760248201527f53616665436173743a2076616c756520646f65736e27742066697420696e20326044820152663234206269747360c81b60648201526084016200029a565b5090565b600063ffffffff821115620005c65760405162461bcd60e51b815260206004820152602660248201527f53616665436173743a2076616c756520646f65736e27742066697420696e203360448201526532206269747360d01b60648201526084016200029a565b620006498383836200053e60201b62000db51760201c565b6001600160a01b038381166000908152600860205260408082205485841683529120546200053e92918216911683818314801590620006885750600081115b156200053e576001600160a01b0383161562000715576001600160a01b038316600090815260096020908152604082208291620006d29190620007a0901b62000dba1785620003ac565b91509150846001600160a01b03166000805160206200296c83398151915283836040516200070a929190918252602082015260400190565b60405180910390a250505b6001600160a01b038216156200053e576001600160a01b03821660009081526009602090815260408220829162000759919062000395901b62000ca51785620003ac565b91509150836001600160a01b03166000805160206200296c833981519152838360405162000791929190918252602082015260400190565b60405180910390a25050505050565b6000620003a3828462000a72565b634e487b7160e01b600052604160045260246000fd5b600181811c90821680620007d957607f821691505b602082108103620007fa57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200053e57600081815260208120601f850160051c81016020861015620008295750805b601f850160051c820191505b818110156200084a5782815560010162000835565b505050505050565b81516001600160401b038111156200086e576200086e620007ae565b62000886816200087f8454620007c4565b8462000800565b602080601f831160018114620008be5760008415620008a55750858301515b600019600386901b1c1916600185901b1785556200084a565b600085815260208120601f198616915b82811015620008ef57888601518255948401946001909101908401620008ce565b50858210156200090e5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052601160045260246000fd5b600181815b80851115620009755781600019048211156200095957620009596200091e565b808516156200096757918102915b93841c939080029062000939565b509250929050565b6000826200098e57506001620003a6565b816200099d57506000620003a6565b8160018114620009b65760028114620009c157620009e1565b6001915050620003a6565b60ff841115620009d557620009d56200091e565b50506001821b620003a6565b5060208310610133831016604e8410600b841016171562000a06575081810a620003a6565b62000a12838362000934565b806000190482111562000a295762000a296200091e565b029392505050565b6000620003a360ff8416836200097d565b8082028115828204841417620003a657620003a66200091e565b80820180821115620003a657620003a66200091e565b81810381811115620003a657620003a66200091e565b60805160a05160c05160e0516101005161012051611e9462000ad86000396000611192015260006111e1015260006111bc015260006111150152600061113f015260006111690152611e946000f3fe608060405234801561001057600080fd5b506004361061018e5760003560e01c80637ecebe00116100de578063a7347c1f11610097578063d505accf11610071578063d505accf14610386578063dd62ed3e14610399578063f1127ed8146103ac578063f2fde38b146103e957600080fd5b8063a7347c1f1461034d578063a9059cbb14610360578063c3cda5201461037357600080fd5b80637ecebe00146102e85780638da5cb5b146102fb5780638e539e8c1461030c57806395d89b411461031f5780639ab24eb014610327578063a457c2d71461033a57600080fd5b8063395093511161014b5780635c19a95c116101255780635c19a95c1461027a5780636fcfff451461028f57806370a08231146102b7578063715018a6146102e057600080fd5b806339509351146102105780633a46b1a814610223578063587cde1e1461023657600080fd5b806306fdde0314610193578063095ea7b3146101b157806318160ddd146101d457806323b872dd146101e6578063313ce567146101f95780633644e51514610208575b600080fd5b61019b6103fc565b6040516101a89190611b40565b60405180910390f35b6101c46101bf366004611baa565b61048e565b60405190151581526020016101a8565b6002545b6040519081526020016101a8565b6101c46101f4366004611bd4565b6104a8565b604051601281526020016101a8565b6101d86104cc565b6101c461021e366004611baa565b6104db565b6101d8610231366004611baa565b6104fd565b610262610244366004611c10565b6001600160a01b039081166000908152600860205260409020541690565b6040516001600160a01b0390911681526020016101a8565b61028d610288366004611c10565b61057c565b005b6102a261029d366004611c10565b610589565b60405163ffffffff90911681526020016101a8565b6101d86102c5366004611c10565b6001600160a01b031660009081526020819052604090205490565b61028d6105ab565b6101d86102f6366004611c10565b6105bf565b6005546001600160a01b0316610262565b6101d861031a366004611c2b565b6105dd565b61019b610639565b6101d8610335366004611c10565b610648565b6101c4610348366004611baa565b6106cf565b61028d61035b366004611c10565b61074a565b6101c461036e366004611baa565b61077d565b61028d610381366004611c55565b61078b565b61028d610394366004611cad565b6108c1565b6101d86103a7366004611d17565b610a25565b6103bf6103ba366004611d4a565b610a50565b60408051825163ffffffff1681526020928301516001600160e01b031692810192909252016101a8565b61028d6103f7366004611c10565b610ad4565b60606003805461040b90611d8a565b80601f016020809104026020016040519081016040528092919081815260200182805461043790611d8a565b80156104845780601f1061045957610100808354040283529160200191610484565b820191906000526020600020905b81548152906001019060200180831161046757829003601f168201915b5050505050905090565b60003361049c818585610dc6565b60019150505b92915050565b6000336104b6858285610eea565b6104c1858585610f5e565b506001949350505050565b60006104d6611108565b905090565b60003361049c8185856104ee8383610a25565b6104f89190611dd4565b610dc6565b60004382106105535760405162461bcd60e51b815260206004820152601f60248201527f4552433230566f7465733a20626c6f636b206e6f7420796574206d696e65640060448201526064015b60405180910390fd5b6001600160a01b0383166000908152600960205260409020610575908361122f565b9392505050565b6105863382611326565b50565b6001600160a01b0381166000908152600960205260408120546104a290610d1e565b6105b361139f565b6105bd60006113f9565b565b6001600160a01b0381166000908152600660205260408120546104a2565b600043821061062e5760405162461bcd60e51b815260206004820152601f60248201527f4552433230566f7465733a20626c6f636b206e6f7420796574206d696e656400604482015260640161054a565b6104a2600a8361122f565b60606004805461040b90611d8a565b6001600160a01b03811660009081526009602052604081205480156106bc576001600160a01b038316600090815260096020526040902061068a600183611de7565b8154811061069a5761069a611dfa565b60009182526020909120015464010000000090046001600160e01b03166106bf565b60005b6001600160e01b03169392505050565b600033816106dd8286610a25565b90508381101561073d5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b606482015260840161054a565b6104c18286868403610dc6565b61075261139f565b6105868161dead610778846001600160a01b031660009081526020819052604090205490565b610f5e565b60003361049c818585610f5e565b834211156107db5760405162461bcd60e51b815260206004820152601d60248201527f4552433230566f7465733a207369676e61747572652065787069726564000000604482015260640161054a565b604080517fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf60208201526001600160a01b0388169181019190915260608101869052608081018590526000906108559061084d9060a0016040516020818303038152906040528051906020012061144b565b858585611499565b9050610860816114c1565b86146108ae5760405162461bcd60e51b815260206004820152601960248201527f4552433230566f7465733a20696e76616c6964206e6f6e636500000000000000604482015260640161054a565b6108b88188611326565b50505050505050565b834211156109115760405162461bcd60e51b815260206004820152601d60248201527f45524332305065726d69743a206578706972656420646561646c696e65000000604482015260640161054a565b60007f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98888886109408c6114c1565b6040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e001604051602081830303815290604052805190602001209050600061099b8261144b565b905060006109ab82878787611499565b9050896001600160a01b0316816001600160a01b031614610a0e5760405162461bcd60e51b815260206004820152601e60248201527f45524332305065726d69743a20696e76616c6964207369676e61747572650000604482015260640161054a565b610a198a8a8a610dc6565b50505050505050505050565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b60408051808201909152600080825260208201526001600160a01b0383166000908152600960205260409020805463ffffffff8416908110610a9457610a94611dfa565b60009182526020918290206040805180820190915291015463ffffffff8116825264010000000090046001600160e01b0316918101919091529392505050565b610adc61139f565b6001600160a01b038116610b415760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161054a565b610586816113f9565b610b548282610bda565b6002546001600160e01b031015610bc65760405162461bcd60e51b815260206004820152603060248201527f4552433230566f7465733a20746f74616c20737570706c79207269736b73206f60448201526f766572666c6f77696e6720766f74657360801b606482015260840161054a565b610bd4600a610ca5836114e9565b50505050565b6001600160a01b038216610c305760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640161054a565b8060026000828254610c429190611dd4565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3610ca16000838361163d565b5050565b60006105758284611dd4565b60006001600160e01b03821115610d1a5760405162461bcd60e51b815260206004820152602760248201527f53616665436173743a2076616c756520646f65736e27742066697420696e20326044820152663234206269747360c81b606482015260840161054a565b5090565b600063ffffffff821115610d1a5760405162461bcd60e51b815260206004820152602660248201527f53616665436173743a2076616c756520646f65736e27742066697420696e203360448201526532206269747360d01b606482015260840161054a565b6001600160a01b03838116600090815260086020526040808220548584168352912054610db592918216911683611648565b505050565b60006105758284611de7565b6001600160a01b038316610e285760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161054a565b6001600160a01b038216610e895760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161054a565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6000610ef68484610a25565b90506000198114610bd45781811015610f515760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000604482015260640161054a565b610bd48484848403610dc6565b6001600160a01b038316610fc25760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b606482015260840161054a565b6001600160a01b0382166110245760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b606482015260840161054a565b6001600160a01b0383166000908152602081905260409020548181101561109c5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b606482015260840161054a565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3610bd484848461163d565b6000306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614801561116157507f000000000000000000000000000000000000000000000000000000000000000046145b1561118b57507f000000000000000000000000000000000000000000000000000000000000000090565b50604080517f00000000000000000000000000000000000000000000000000000000000000006020808301919091527f0000000000000000000000000000000000000000000000000000000000000000828401527f000000000000000000000000000000000000000000000000000000000000000060608301524660808301523060a0808401919091528351808403909101815260c0909201909252805191012090565b81546000908181600581111561128957600061124a84611785565b6112549085611de7565b600088815260209020909150869082015463ffffffff16111561127957809150611287565b611284816001611dd4565b92505b505b808210156112d657600061129d838361186d565b600088815260209020909150869082015463ffffffff1611156112c2578091506112d0565b6112cd816001611dd4565b92505b50611289565b8015611310576112f9866112eb600184611de7565b600091825260209091200190565b5464010000000090046001600160e01b0316611313565b60005b6001600160e01b03169695505050505050565b6001600160a01b038281166000818152600860208181526040808420805485845282862054949093528787166001600160a01b03198416811790915590519190951694919391928592917f3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f9190a4610bd4828483611648565b6005546001600160a01b031633146105bd5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161054a565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60006104a2611458611108565b8360405161190160f01b6020820152602281018390526042810182905260009060620160405160208183030381529060405280519060200120905092915050565b60008060006114aa87878787611888565b915091506114b78161194c565b5095945050505050565b6001600160a01b03811660009081526006602052604090208054600181018255905b50919050565b8254600090819081811561153657611506876112eb600185611de7565b60408051808201909152905463ffffffff8116825264010000000090046001600160e01b0316602082015261154b565b60408051808201909152600080825260208201525b905080602001516001600160e01b0316935061156b84868863ffffffff16565b92506000821180156115835750805163ffffffff1643145b156115c85761159183610cb1565b6115a0886112eb600186611de7565b80546001600160e01b03929092166401000000000263ffffffff909216919091179055611633565b8660405180604001604052806115dd43610d1e565b63ffffffff1681526020016115f186610cb1565b6001600160e01b0390811690915282546001810184556000938452602093849020835194909301519091166401000000000263ffffffff909316929092179101555b5050935093915050565b610db5838383610d83565b816001600160a01b0316836001600160a01b03161415801561166a5750600081115b15610db5576001600160a01b038316156116f8576001600160a01b038316600090815260096020526040812081906116a590610dba856114e9565b91509150846001600160a01b03167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a72483836040516116ed929190918252602082015260400190565b60405180910390a250505b6001600160a01b03821615610db5576001600160a01b0382166000908152600960205260408120819061172e90610ca5856114e9565b91509150836001600160a01b03167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a7248383604051611776929190918252602082015260400190565b60405180910390a25050505050565b60008160000361179757506000919050565b600060016117a484611a96565b901c6001901b905060018184816117bd576117bd611e10565b048201901c905060018184816117d5576117d5611e10565b048201901c905060018184816117ed576117ed611e10565b048201901c9050600181848161180557611805611e10565b048201901c9050600181848161181d5761181d611e10565b048201901c9050600181848161183557611835611e10565b048201901c9050600181848161184d5761184d611e10565b048201901c90506105758182858161186757611867611e10565b04611b2a565b600061187c6002848418611e26565b61057590848416611dd4565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08311156118bf5750600090506003611943565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015611913573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b03811661193c57600060019250925050611943565b9150600090505b94509492505050565b600081600481111561196057611960611e48565b036119685750565b600181600481111561197c5761197c611e48565b036119c95760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e61747572650000000000000000604482015260640161054a565b60028160048111156119dd576119dd611e48565b03611a2a5760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e67746800604482015260640161054a565b6003816004811115611a3e57611a3e611e48565b036105865760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b606482015260840161054a565b600080608083901c15611aab57608092831c92015b604083901c15611abd57604092831c92015b602083901c15611acf57602092831c92015b601083901c15611ae157601092831c92015b600883901c15611af357600892831c92015b600483901c15611b0557600492831c92015b600283901c15611b1757600292831c92015b600183901c156104a25760010192915050565b6000818310611b395781610575565b5090919050565b600060208083528351808285015260005b81811015611b6d57858101830151858201604001528201611b51565b506000604082860101526040601f19601f8301168501019250505092915050565b80356001600160a01b0381168114611ba557600080fd5b919050565b60008060408385031215611bbd57600080fd5b611bc683611b8e565b946020939093013593505050565b600080600060608486031215611be957600080fd5b611bf284611b8e565b9250611c0060208501611b8e565b9150604084013590509250925092565b600060208284031215611c2257600080fd5b61057582611b8e565b600060208284031215611c3d57600080fd5b5035919050565b803560ff81168114611ba557600080fd5b60008060008060008060c08789031215611c6e57600080fd5b611c7787611b8e565b95506020870135945060408701359350611c9360608801611c44565b92506080870135915060a087013590509295509295509295565b600080600080600080600060e0888a031215611cc857600080fd5b611cd188611b8e565b9650611cdf60208901611b8e565b95506040880135945060608801359350611cfb60808901611c44565b925060a0880135915060c0880135905092959891949750929550565b60008060408385031215611d2a57600080fd5b611d3383611b8e565b9150611d4160208401611b8e565b90509250929050565b60008060408385031215611d5d57600080fd5b611d6683611b8e565b9150602083013563ffffffff81168114611d7f57600080fd5b809150509250929050565b600181811c90821680611d9e57607f821691505b6020821081036114e357634e487b7160e01b600052602260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b808201808211156104a2576104a2611dbe565b818103818111156104a2576104a2611dbe565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601260045260246000fd5b600082611e4357634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052602160045260246000fdfea26469706673582212204502dc8cc38956b0f3a7caf6ec5a441b0d2e3fc80876e1ea269b318c8e85b0b664736f6c63430008120033dec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a724