60806040523480156200001157600080fd5b506040516200516538038062005165833981016040819052620000349162000785565b60405180604001604052806011815260200170151a195198589c9a58d85b9d11d5525311607a1b81525060405180604001604052806007815260200166151191d552531160ca1b8152506200009862000092620004ae60201b60201c565b620004b2565b6000805460ff60a01b191690556003620000b38382620008e3565b506004620000c28282620008e3565b50600060018190555050506001600b8190555060006040518060c00160405280600115158152602001600163ffffffff168152602001600061ffff16815260200166470de4df82000081526020016040518060400160405280601881526020017f5350484552453a2057617272696f72206f66204c6967687400000000000000008152508152602001604051806060016040528060238152602001620051426023913990526001600052600f602090815281517f169f97de0d9a84d840042b17d3c6b9638b3d6fd9024c9eb0c7a306a17b49f88f805492840151604085015161ffff16650100000000000261ffff60281b1963ffffffff929092166101000264ffffffff00199415159490941664ffffffffff1990951694909417929092179190911691909117815560608201517f169f97de0d9a84d840042b17d3c6b9638b3d6fd9024c9eb0c7a306a17b49f89055608082015191925082917f169f97de0d9a84d840042b17d3c6b9638b3d6fd9024c9eb0c7a306a17b49f891906200024a9082620008e3565b5060a08201516003820190620002619082620008e3565b50506040805160c08101825260018152600260208083018281526000848601818152666a94d74f4300006060870190815287518089018952601b81527f5350484552453a20436f6e74656d706f72617279204b6e69676874000000000081870152608088019081528851808a01909952601d89527f477561726469616e206f6620746865206469676974616c207265616c6d0000008987015260a088019890985294909152600f90925283517fa74ba3945261e09fde15ba3db55005b205e61eeb4ad811ac0faa2b315bffeead80549251935161ffff16650100000000000261ffff60281b1963ffffffff959095166101000264ffffffff00199315159390931664ffffffffff1990941693909317919091179290921617815590517fa74ba3945261e09fde15ba3db55005b205e61eeb4ad811ac0faa2b315bffeeae5591519092508291907fa74ba3945261e09fde15ba3db55005b205e61eeb4ad811ac0faa2b315bffeeaf90620003d59082620008e3565b5060a08201516003820190620003ec9082620008e3565b50506040805160608101825260008082526020820152600591810191909152600e805463ffffffff19166205000017905590506200043f738c80f1ce1edd76ddcde25b839d45d94f395f1d528562000502565b601280546001600160a01b0319167321f52c84a6f9d858b7b93db0d88e592196b1c384179055604080518082019091526011815270151a195198589c9a58d85b9d11d5525311607a1b6020820152620004989062000607565b620004a38562000619565b5050505050620009e4565b3390565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6127106001600160601b0382161115620005765760405162461bcd60e51b815260206004820152602a60248201527f455243323938313a20726f79616c7479206665652077696c6c206578636565646044820152692073616c65507269636560b01b60648201526084015b60405180910390fd5b6001600160a01b038216620005ce5760405162461bcd60e51b815260206004820152601960248201527f455243323938313a20696e76616c69642072656365697665720000000000000060448201526064016200056d565b604080518082019091526001600160a01b039092168083526001600160601b039091166020909201829052600160a01b90910217600955565b600d620006158282620008e3565b5050565b6200062362000678565b6200062d620006d6565b600c6200063b8282620008e3565b507f6741b2fc379fad678116fe3d4d4b9a1a184ab53ba36b86ad0fa66340b1ab41ad816040516200066d9190620009af565b60405180910390a150565b6000546001600160a01b03163314620006d45760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016200056d565b565b620006ea600054600160a01b900460ff1690565b15620006d45760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b60448201526064016200056d565b634e487b7160e01b600052604160045260246000fd5b60005b838110156200075f57818101518382015260200162000745565b50506000910152565b80516001600160601b03811681146200078057600080fd5b919050565b600080604083850312156200079957600080fd5b82516001600160401b0380821115620007b157600080fd5b818501915085601f830112620007c657600080fd5b815181811115620007db57620007db6200072c565b604051601f8201601f19908116603f011681019083821181831017156200080657620008066200072c565b816040528281528860208487010111156200082057600080fd5b6200083383602083016020880162000742565b8096505050505050620008496020840162000768565b90509250929050565b600181811c908216806200086757607f821691505b6020821081036200088857634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620008de576000816000526020600020601f850160051c81016020861015620008b95750805b601f850160051c820191505b81811015620008da57828155600101620008c5565b5050505b505050565b81516001600160401b03811115620008ff57620008ff6200072c565b620009178162000910845462000852565b846200088e565b602080601f8311600181146200094f5760008415620009365750858301515b600019600386901b1c1916600185901b178555620008da565b600085815260208120601f198616915b8281101562000980578886015182559484019460019091019084016200095f565b50858210156200099f5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6020815260008251806020840152620009d081604085016020870162000742565b601f01601f19169190910160400192915050565b61474e80620009f46000396000f3fe6080604052600436106102bb5760003560e01c80636d35bfb91161016e578063a118babd116100cb578063d0047acf1161007f578063dc33e68111610064578063dc33e681146107d7578063e985e9c5146107f7578063f2fde38b1461084d57600080fd5b8063d0047acf146107a4578063d3c6f6c7146107b757600080fd5b8063ad5b882c116100b0578063ad5b882c14610744578063b88d4fde14610771578063c87b56dd1461078457600080fd5b8063a118babd1461070f578063a22cb4651461072457600080fd5b806387a5b67c116101225780638da5cb5b116101075780638da5cb5b1461067e57806390aa0b0f146106a957806395d89b41146106fa57600080fd5b806387a5b67c146106215780638d784d5e1461065157600080fd5b8063715018a611610153578063715018a6146105e45780638127d864146105f95780638456cb591461060c57600080fd5b80636d35bfb9146105a457806370a08231146105c457600080fd5b80632913daa01161021c57806355f804b3116101d05780635c975abb116101b55780635c975abb1461053f5780636352211e1461056f5780636c0360eb1461058f57600080fd5b806355f804b3146104ff578063597d10071461051f57600080fd5b80633f4ba83a116102015780633f4ba83a146104b757806342842e0e146104cc57806353b2a7d0146104df57600080fd5b80632913daa01461043e5780632a55205a1461046b57600080fd5b8063095ea7b3116102735780630e87c673116102585780630e87c673146103d357806318160ddd1461040857806323b872dd1461042b57600080fd5b8063095ea7b31461039e5780630b6d18de146103b157600080fd5b806306fdde03116102a457806306fdde0314610317578063081812fc14610339578063085a10cf1461037e57600080fd5b806301ffc9a7146102c057806304634d8d146102f5575b600080fd5b3480156102cc57600080fd5b506102e06102db366004613849565b61086d565b60405190151581526020015b60405180910390f35b34801561030157600080fd5b50610315610310366004613891565b61088d565b005b34801561032357600080fd5b5061032c610908565b6040516102ec9190613947565b34801561034557600080fd5b5061035961035436600461395a565b61099a565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016102ec565b34801561038a57600080fd5b50610315610399366004613983565b6109fb565b6103156103ac36600461399e565b610a71565b3480156103bd57600080fd5b506103c6610a81565b6040516102ec9190613a39565b3480156103df57600080fd5b506103f36103ee366004613b2d565b610ea4565b60405163ffffffff90911681526020016102ec565b34801561041457600080fd5b50600254600154035b6040519081526020016102ec565b610315610439366004613b48565b611016565b34801561044a57600080fd5b50600e5462010000900461ffff1660405161ffff90911681526020016102ec565b34801561047757600080fd5b5061048b610486366004613b84565b611275565b6040805173ffffffffffffffffffffffffffffffffffffffff90931683526020830191909152016102ec565b3480156104c357600080fd5b5061031561136c565b6103156104da366004613b48565b61137e565b3480156104eb57600080fd5b506103156104fa366004613983565b61139e565b34801561050b57600080fd5b5061031561051a366004613c9a565b611414565b34801561052b57600080fd5b5061031561053a366004613ce3565b611460565b34801561054b57600080fd5b5060005474010000000000000000000000000000000000000000900460ff166102e0565b34801561057b57600080fd5b5061035961058a36600461395a565b61156e565b34801561059b57600080fd5b5061032c611579565b3480156105b057600080fd5b506103156105bf366004613cff565b611588565b3480156105d057600080fd5b5061041d6105df366004613cff565b611682565b3480156105f057600080fd5b506103156116fb565b610315610607366004613d1a565b61170d565b34801561061857600080fd5b50610315611b85565b34801561062d57600080fd5b506102e061063c366004613cff565b60116020526000908152604090205460ff1681565b34801561065d57600080fd5b5061067161066c366004613b2d565b611b95565b6040516102ec9190613d56565b34801561068a57600080fd5b5060005473ffffffffffffffffffffffffffffffffffffffff16610359565b3480156106b557600080fd5b50600e546106d99060ff8082169161010081049091169062010000900461ffff1683565b604080519315158452911515602084015261ffff16908201526060016102ec565b34801561070657600080fd5b5061032c611e0c565b34801561071b57600080fd5b50610315611e1b565b34801561073057600080fd5b5061031561073f366004613de1565b611f86565b34801561075057600080fd5b506012546103599073ffffffffffffffffffffffffffffffffffffffff1681565b61031561077f366004613e14565b61201d565b34801561079057600080fd5b5061032c61079f36600461395a565b612084565b6103156107b2366004613d1a565b61234f565b3480156107c357600080fd5b506103156107d2366004613f2a565b6126fd565b3480156107e357600080fd5b5061041d6107f2366004613cff565b612871565b34801561080357600080fd5b506102e0610812366004613fea565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260086020908152604080832093909416825291909152205460ff1690565b34801561085957600080fd5b50610315610868366004613cff565b6128a9565b600061087882612960565b80610887575061088782612a41565b92915050565b610895612ad8565b61089d612b59565b6108a78282612bde565b6040805173ffffffffffffffffffffffffffffffffffffffff841681526bffffffffffffffffffffffff831660208201527fe12d7d5bdb8218a22277dca8f854dd4573a1cea3d3e4808dc567df9eb1c14bf491015b60405180910390a15050565b60606003805461091790614014565b80601f016020809104026020016040519081016040528092919081815260200182805461094390614014565b80156109905780601f1061096557610100808354040283529160200191610990565b820191906000526020600020905b81548152906001019060200180831161097357829003601f168201915b5050505050905090565b60006109a582612d57565b6109d2576109d27fcf4700e400000000000000000000000000000000000000000000000000000000612db6565b5060009081526007602052604090205473ffffffffffffffffffffffffffffffffffffffff1690565b610a03612ad8565b610a0b612b59565b600e80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00168215159081179091556040519081527fe2bc7c34ea2bc57664d5a8700a7476e09714d671ef6a2ef218add7c058e8b2f3906020015b60405180910390a150565b610a7d82826001612dc0565b5050565b6040805160c08101825260008082526020820181905291810182905260608082018190526080820181905260a08201529060015b60ff8181161015610af95760ff8082166000908152600f60205260409020541615610aec5781610ae481614096565b925050610af1565b610af9565b600101610ab5565b506040805160c08101825260009181019190915260608082018190526080820181905260a0820152600e5460ff81161515825262010000900461ffff166020820152610b486002546001540390565b63ffffffff9081166040830152821667ffffffffffffffff811115610b6f57610b6f613ba6565b604051908082528060200260200182016040528015610b98578160200160208202803683370190505b50606082015263ffffffff821667ffffffffffffffff811115610bbd57610bbd613ba6565b604051908082528060200260200182016040528015610be6578160200160208202803683370190505b5060a082015263ffffffff821667ffffffffffffffff811115610c0b57610c0b613ba6565b604051908082528060200260200182016040528015610c34578160200160208202803683370190505b50608082015260005b8263ffffffff168160ff161015610e9d576000610c5b8260016140b9565b60ff8181166000908152600f60209081526040808320815160c08101835281549586161515815263ffffffff610100870416938101939093526501000000000090940461ffff16908201526001830154606082015260028301805494955091939092916080840191610ccc90614014565b80601f0160208091040260200160405190810160405280929190818152602001828054610cf890614014565b8015610d455780601f10610d1a57610100808354040283529160200191610d45565b820191906000526020600020905b815481529060010190602001808311610d2857829003601f168201915b50505050508152602001600382018054610d5e90614014565b80601f0160208091040260200160405190810160405280929190818152602001828054610d8a90614014565b8015610dd75780601f10610dac57610100808354040283529160200191610dd7565b820191906000526020600020905b815481529060010190602001808311610dba57829003601f168201915b50505050508152505090508060000151610df2575050610e9d565b806020015184606001518460ff1681518110610e1057610e106140d2565b602002602001019063ffffffff16908163ffffffff168152505080606001518460a001518460ff1681518110610e4857610e486140d2565b602002602001018181525050806040015184608001518460ff1681518110610e7257610e726140d2565b602002602001019061ffff16908161ffff168152505050508080610e9590614101565b915050610c3d565b5092915050565b6000610eb58263ffffffff16612d57565b610f6c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f4755494c443a3a746f6b656e4964546f56617269616e7449643a45524337323160448201527f4d657461646174613a55524920717565727920666f72206e6f6e65786973746560648201527f6e7420746f6b656e000000000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b63ffffffff80831660009081526010602052604081205490911690819003610887576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603660248201527f4755494c443a3a746f6b656e4964546f56617269616e7449643a4e6f2076617260448201527f69616e7449642073657420666f7220746f6b656e4964000000000000000000006064820152608401610f63565b600061102182612ed8565b73ffffffffffffffffffffffffffffffffffffffff948516949091508116841461106e5761106e7fa114810000000000000000000000000000000000000000000000000000000000612db6565b600082815260076020526040902080543380821473ffffffffffffffffffffffffffffffffffffffff8816909114176111025773ffffffffffffffffffffffffffffffffffffffff8616600090815260086020908152604080832033845290915290205460ff16611102576111027f59c896be00000000000000000000000000000000000000000000000000000000612db6565b801561110d57600082555b73ffffffffffffffffffffffffffffffffffffffff86811660009081526006602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff019055918716808252919020805460010190554260a01b177c0200000000000000000000000000000000000000000000000000000000176000858152600560205260408120919091557c0200000000000000000000000000000000000000000000000000000000841690036111fc576001840160008181526005602052604081205490036111fa5760015481146111fa5760008181526005602052604090208490555b505b73ffffffffffffffffffffffffffffffffffffffff85168481887fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600080a48060000361126c5761126c7fea553b3400000000000000000000000000000000000000000000000000000000612db6565b50505050505050565b6000828152600a6020908152604080832081518083019092525473ffffffffffffffffffffffffffffffffffffffff8116808352740100000000000000000000000000000000000000009091046bffffffffffffffffffffffff1692820192909252829161133057506040805180820190915260095473ffffffffffffffffffffffffffffffffffffffff811682527401000000000000000000000000000000000000000090046bffffffffffffffffffffffff1660208201525b602081015160009061271090611354906bffffffffffffffffffffffff1687614120565b61135e9190614137565b915196919550909350505050565b611374612ad8565b61137c613009565b565b6113998383836040518060200160405280600081525061201d565b505050565b6113a6612ad8565b6113ae612b59565b600e8054821515610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff9091161790556040517f936953bf8d0bde80d770cbcdc11a11bb7543ea7d6810004d3824146d7347b12790610a6690831515815260200190565b61141c612ad8565b611424612b59565b600c61143082826141c2565b507f6741b2fc379fad678116fe3d4d4b9a1a184ab53ba36b86ad0fa66340b1ab41ad81604051610a669190613947565b611468612ad8565b611470612b59565b63ffffffff82166000908152600f602052604090205460ff16611515576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f4755494c443a3a73657456617269616e7450726963653a56617269616e74204960448201527f44206e6f742073657400000000000000000000000000000000000000000000006064820152608401610f63565b63ffffffff82166000818152600f602052604090819020600101839055517f0b8732d6cc69b09c8eb3f9d4389f842490f8a8c16194ea6d0d9b034ca11cf228906115629084815260200190565b60405180910390a25050565b600061088782612ed8565b6060611583613086565b905090565b611590612ad8565b611598612b59565b73ffffffffffffffffffffffffffffffffffffffff811661163b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f4755494c443a3a7365744d696e74526f79616c747952656365697665723a526560448201527f6365697665722063616e6e6f74206265203020616464726573730000000000006064820152608401610f63565b601280547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b600073ffffffffffffffffffffffffffffffffffffffff82166116c8576116c87f8f4eb60400000000000000000000000000000000000000000000000000000000612db6565b5073ffffffffffffffffffffffffffffffffffffffff1660009081526006602052604090205467ffffffffffffffff1690565b611703612ad8565b61137c6000613095565b61171561310a565b61171d612b59565b3360009081526011602052604090205460ff166117bc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f4755494c443a3a6163636573734c6973744d696e743a53656e646572206e6f7460448201527f206f6e20616363657373206c69737400000000000000000000000000000000006064820152608401610f63565b60408051606081018252600e5460ff8082161515835261010082041615156020808401919091526201000090910461ffff168284015263ffffffff84166000908152600f9091529190912073ffffffffffffffffffffffffffffffffffffffff85166118aa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f4755494c443a3a6163636573734c6973744d696e743a43616e6e6f74206d696e60448201527f7420746f203020616464726573730000000000000000000000000000000000006064820152608401610f63565b816020015161193b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4755494c443a3a6163636573734c6973744d696e743a446576206d696e74206360448201527f6c6f7365640000000000000000000000000000000000000000000000000000006064820152608401610f63565b816040015161ffff16841115801561195257508315155b6119de576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f4755494c443a3a6163636573734c6973744d696e743a556e737570706f72746560448201527f64207175616e74697479000000000000000000000000000000000000000000006064820152608401610f63565b805460ff16611a6f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f4755494c443a3a6163636573734c6973744d696e743a56617269616e7420494460448201527f206e6f74207365740000000000000000000000000000000000000000000000006064820152608401610f63565b6000611a7e6002546001540390565b9050805b611a9263ffffffff8316876142dc565b8163ffffffff161015611b325763ffffffff81811660008181526010602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000016948a1694851790555173ffffffffffffffffffffffffffffffffffffffff8b169392917fc5d74e3546027ffb88c35b9482cc5709820a3ca00985c5301614f1af680888fd91a480611b2a81614096565b915050611a82565b50815485908390600590611b5490849065010000000000900461ffff166142ef565b92506101000a81548161ffff021916908361ffff160217905550611b78868661317d565b5050506113996001600b55565b611b8d612ad8565b61137c613197565b611bda6040518060c00160405280600015158152602001600063ffffffff168152602001600061ffff1681526020016000815260200160608152602001606081525090565b63ffffffff82166000908152600f602052604090205460ff16611c7f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4755494c443a3a76617269616e74446174613a56617269616e74204944206e6f60448201527f74207365740000000000000000000000000000000000000000000000000000006064820152608401610f63565b63ffffffff8281166000908152600f6020908152604091829020825160c081018452815460ff8116151582526101008104909516928101929092526501000000000090930461ffff169181019190915260018201546060820152600282018054919291608084019190611cf190614014565b80601f0160208091040260200160405190810160405280929190818152602001828054611d1d90614014565b8015611d6a5780601f10611d3f57610100808354040283529160200191611d6a565b820191906000526020600020905b815481529060010190602001808311611d4d57829003601f168201915b50505050508152602001600382018054611d8390614014565b80601f0160208091040260200160405190810160405280929190818152602001828054611daf90614014565b8015611dfc5780601f10611dd157610100808354040283529160200191611dfc565b820191906000526020600020905b815481529060010190602001808311611ddf57829003601f168201915b5050505050815250509050919050565b60606004805461091790614014565b611e23612ad8565b611e2b61310a565b611e33612b59565b601254604051479160009173ffffffffffffffffffffffffffffffffffffffff9091169047908381818185875af1925050503d8060008114611e91576040519150601f19603f3d011682016040523d82523d6000602084013e611e96565b606091505b5050905080611f27576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f4755494c443a3a77697468647261775061796d656e743a5472616e736665722060448201527f6661696c65642e000000000000000000000000000000000000000000000000006064820152608401610f63565b6012546040805173ffffffffffffffffffffffffffffffffffffffff9092168252602082018490527f84511ecc081974f18e7f3e0dcc19db078b55bbd3852ddd0dd85b3aebb7bf94c2910160405180910390a1505061137c6001600b55565b33600081815260086020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168085529083529281902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b612028848484611016565b73ffffffffffffffffffffffffffffffffffffffff83163b1561207e5761205184848484613206565b61207e5761207e7fd1a57ed600000000000000000000000000000000000000000000000000000000612db6565b50505050565b606061208f82612d57565b61211b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603d60248201527f4755494c443a3a746f6b655552493a4552433732314d657461646174613a555260448201527f4920717565727920666f72206e6f6e6578697374656e7420746f6b656e0000006064820152608401610f63565b63ffffffff808316600090815260106020908152604080832054909316808352600f9091529190205460ff166121d3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f4755494c443a3a746f6b656e5552493a2056617269616e74204944206e6f742060448201527f73657400000000000000000000000000000000000000000000000000000000006064820152608401610f63565b63ffffffff81166000908152600f6020526040812060020180546121f690614014565b80601f016020809104026020016040519081016040528092919081815260200182805461222290614014565b801561226f5780601f106122445761010080835404028352916020019161226f565b820191906000526020600020905b81548152906001019060200180831161225257829003601f168201915b50505063ffffffff85166000908152600f602052604081206003018054949550909390925061229e9150614014565b80601f01602080910402602001604051908101604052809291908181526020018280546122ca90614014565b80156123175780601f106122ec57610100808354040283529160200191612317565b820191906000526020600020905b8154815290600101906020018083116122fa57829003601f168201915b505050505090506123466123308663ffffffff16613377565b61233f8563ffffffff16613377565b8484613435565b95945050505050565b61235761310a565b61235f612b59565b60408051606081018252600e5460ff8082161515835261010082041615156020808401919091526201000090910461ffff168284015263ffffffff84166000908152600f9091529190912073ffffffffffffffffffffffffffffffffffffffff851661244c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f4755494c443a3a6d696e743a43616e6e6f74206d696e7420746f20302061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610f63565b81516124b4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f4755494c443a3a6d696e743a4d696e7420636c6f7365640000000000000000006044820152606401610f63565b816040015161ffff1684111580156124cb57508315155b612531576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4755494c443a3a6d696e743a556e737570706f72746564207175616e746974796044820152606401610f63565b805460ff1661259c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f4755494c443a3a6d696e743a56617269616e74204944206e6f742073657400006044820152606401610f63565b60018101546125ab9085614120565b34101561263a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f4755494c443a3a6d696e743a45746865722076616c75652073656e742069732060448201527f696e636f727265637400000000000000000000000000000000000000000000006064820152608401610f63565b60006126496002546001540390565b9050805b61265d63ffffffff8316876142dc565b8163ffffffff161015611b325763ffffffff81811660008181526010602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000016948a1694851790555173ffffffffffffffffffffffffffffffffffffffff8b169392917fc5d74e3546027ffb88c35b9482cc5709820a3ca00985c5301614f1af680888fd91a4806126f581614096565b91505061264d565b612705612ad8565b61270d612b59565b805182511461279e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4755494c443a3a7570646174654163636573734c6973743a4172726179206c6560448201527f6e6774687320646f206e6f74206d6174636800000000000000000000000000006064820152608401610f63565b60005b825181101561283f578181815181106127bc576127bc6140d2565b6020026020010151601160008584815181106127da576127da6140d2565b60209081029190910181015173ffffffffffffffffffffffffffffffffffffffff16825281019190915260400160002080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169115159190911790556001016127a1565b507fdb4cad279a893422aa79c49ff874a7db86281bf1d23b51050c37733516f4229182826040516108fc92919061430a565b73ffffffffffffffffffffffffffffffffffffffff81166000908152600660205260408082205467ffffffffffffffff911c16610887565b6128b1612ad8565b73ffffffffffffffffffffffffffffffffffffffff8116612954576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610f63565b61295d81613095565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff00000000000000000000000000000000000000000000000000000000831614806129f357507f80ac58cd000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b806108875750507fffffffff00000000000000000000000000000000000000000000000000000000167f5b5e139f000000000000000000000000000000000000000000000000000000001490565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f2a55205a00000000000000000000000000000000000000000000000000000000148061088757507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff00000000000000000000000000000000000000000000000000000000831614610887565b60005473ffffffffffffffffffffffffffffffffffffffff16331461137c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610f63565b60005474010000000000000000000000000000000000000000900460ff161561137c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610f63565b6127106bffffffffffffffffffffffff82161115612c7e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f455243323938313a20726f79616c7479206665652077696c6c2065786365656460448201527f2073616c655072696365000000000000000000000000000000000000000000006064820152608401610f63565b73ffffffffffffffffffffffffffffffffffffffff8216612cfb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f455243323938313a20696e76616c6964207265636569766572000000000000006044820152606401610f63565b6040805180820190915273ffffffffffffffffffffffffffffffffffffffff9092168083526bffffffffffffffffffffffff90911660209092018290527401000000000000000000000000000000000000000090910217600955565b6000600154821015612db15760005b5060008281526005602052604081205490819003612d8e57612d878361439d565b9250612d66565b7c0100000000000000000000000000000000000000000000000000000000161590505b919050565b8060005260046000fd5b6000612dcb8361156e565b9050818015612df057503373ffffffffffffffffffffffffffffffffffffffff821614155b15612e565773ffffffffffffffffffffffffffffffffffffffff8116600090815260086020908152604080832033845290915290205460ff16612e5657612e567fcfb3b94200000000000000000000000000000000000000000000000000000000612db6565b60008381526007602052604080822080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff88811691821790925591518693918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a450505050565b60008181526005602052604081205490819003612fb4576001548210612f2157612f217fdf2d9b4200000000000000000000000000000000000000000000000000000000612db6565b5b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff016000818152600560205260409020548015612f22577c01000000000000000000000000000000000000000000000000000000008116600003612f8657919050565b612faf7fdf2d9b4200000000000000000000000000000000000000000000000000000000612db6565b612f22565b7c01000000000000000000000000000000000000000000000000000000008116600003612fe057919050565b612db17fdf2d9b4200000000000000000000000000000000000000000000000000000000612db6565b6130116134f8565b600080547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff1690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b6060600c805461091790614014565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6002600b5403613176576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610f63565b6002600b55565b610a7d82826040518060200160405280600081525061357c565b61319f612b59565b600080547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16740100000000000000000000000000000000000000001790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25861305c3390565b6040517f150b7a0200000000000000000000000000000000000000000000000000000000815260009073ffffffffffffffffffffffffffffffffffffffff85169063150b7a02906132619033908990889088906004016143d2565b6020604051808303816000875af19250505080156132ba575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682019092526132b791810190614411565b60015b613328573d8080156132e8576040519150601f19603f3d011682016040523d82523d6000602084013e6132ed565b606091505b508051600003613320576133207fd1a57ed600000000000000000000000000000000000000000000000000000000612db6565b805181602001fd5b7fffffffff00000000000000000000000000000000000000000000000000000000167f150b7a02000000000000000000000000000000000000000000000000000000001490505b949350505050565b606060006133848361360b565b600101905060008167ffffffffffffffff8111156133a4576133a4613ba6565b6040519080825280601f01601f1916602001820160405280156133ce576020820181803683370190505b5090508181016020015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a85049450846133d857509392505050565b60606000613478856040518060400160405280600481526020017f2e706e67000000000000000000000000000000000000000000000000000000008152506136ed565b905060006134bb866040518060400160405280600481526020017f2e6d7034000000000000000000000000000000000000000000000000000000008152506136ed565b905086858888600d8887876040516020016134dd9897969594939291906144db565b60405160208183030381529060405292505050949350505050565b60005474010000000000000000000000000000000000000000900460ff1661137c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f74207061757365640000000000000000000000006044820152606401610f63565b613586838361371c565b73ffffffffffffffffffffffffffffffffffffffff83163b15611399576001548281035b6135bd6000868380600101945086613206565b6135ea576135ea7fd1a57ed600000000000000000000000000000000000000000000000000000000612db6565b8181106135aa578160015414613604576136046000612db6565b5050505050565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310613654577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310613680576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061369e57662386f26fc10000830492506010015b6305f5e10083106136b6576305f5e100830492506008015b61271083106136ca57612710830492506004015b606483106136dc576064830492506002015b600a83106108875760010192915050565b6060600c8383604051602001613705939291906146df565b604051602081830303815290604052905092915050565b6001546000829003613751576137517fb562e8dd00000000000000000000000000000000000000000000000000000000612db6565b600081815260056020908152604080832073ffffffffffffffffffffffffffffffffffffffff87164260a01b6001881460e11b178117909155808452600690925282208054680100000000000000018602019055908190036137d6576137d67f2e07630000000000000000000000000000000000000000000000000000000000612db6565b818301825b808360007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600080a48181600101915081036137db575060015550505050565b7fffffffff000000000000000000000000000000000000000000000000000000008116811461295d57600080fd5b60006020828403121561385b57600080fd5b81356138668161381b565b9392505050565b803573ffffffffffffffffffffffffffffffffffffffff81168114612db157600080fd5b600080604083850312156138a457600080fd5b6138ad8361386d565b915060208301356bffffffffffffffffffffffff811681146138ce57600080fd5b809150509250929050565b60005b838110156138f45781810151838201526020016138dc565b50506000910152565b600081518084526139158160208601602086016138d9565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061386660208301846138fd565b60006020828403121561396c57600080fd5b5035919050565b80358015158114612db157600080fd5b60006020828403121561399557600080fd5b61386682613973565b600080604083850312156139b157600080fd5b6139ba8361386d565b946020939093013593505050565b60008151808452602080850194506020840160005b838110156139fd57815161ffff16875295820195908201906001016139dd565b509495945050505050565b60008151808452602080850194506020840160005b838110156139fd57815187529582019590820190600101613a1d565b6000602080835260e08301845115158285015261ffff82860151166040850152604085015163ffffffff80821660608701526060870151915060c06080870152828251808552610100880191508584019450600093505b80841015613ab257845183168252938501936001939093019290850190613a90565b50608088015194507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09350838782030160a0880152613af181866139c8565b945050505060a0850151818584030160c0860152613b0f8382613a08565b9695505050505050565b803563ffffffff81168114612db157600080fd5b600060208284031215613b3f57600080fd5b61386682613b19565b600080600060608486031215613b5d57600080fd5b613b668461386d565b9250613b746020850161386d565b9150604084013590509250925092565b60008060408385031215613b9757600080fd5b50508035926020909101359150565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715613c1c57613c1c613ba6565b604052919050565b600067ffffffffffffffff831115613c3e57613c3e613ba6565b613c6f60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f86011601613bd5565b9050828152838383011115613c8357600080fd5b828260208301376000602084830101529392505050565b600060208284031215613cac57600080fd5b813567ffffffffffffffff811115613cc357600080fd5b8201601f81018413613cd457600080fd5b61336f84823560208401613c24565b60008060408385031215613cf657600080fd5b6139ba83613b19565b600060208284031215613d1157600080fd5b6138668261386d565b600080600060608486031215613d2f57600080fd5b613d388461386d565b925060208401359150613d4d60408501613b19565b90509250925092565b6020815281511515602082015263ffffffff602083015116604082015261ffff6040830151166060820152606082015160808201526000608083015160c060a0840152613da660e08401826138fd565b905060a08401517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08483030160c085015261234682826138fd565b60008060408385031215613df457600080fd5b613dfd8361386d565b9150613e0b60208401613973565b90509250929050565b60008060008060808587031215613e2a57600080fd5b613e338561386d565b9350613e416020860161386d565b925060408501359150606085013567ffffffffffffffff811115613e6457600080fd5b8501601f81018713613e7557600080fd5b613e8487823560208401613c24565b91505092959194509250565b600067ffffffffffffffff821115613eaa57613eaa613ba6565b5060051b60200190565b600082601f830112613ec557600080fd5b81356020613eda613ed583613e90565b613bd5565b8083825260208201915060208460051b870101935086841115613efc57600080fd5b602086015b84811015613f1f57613f1281613973565b8352918301918301613f01565b509695505050505050565b60008060408385031215613f3d57600080fd5b823567ffffffffffffffff80821115613f5557600080fd5b818501915085601f830112613f6957600080fd5b81356020613f79613ed583613e90565b82815260059290921b84018101918181019089841115613f9857600080fd5b948201945b83861015613fbd57613fae8661386d565b82529482019490820190613f9d565b96505086013592505080821115613fd357600080fd5b50613fe085828601613eb4565b9150509250929050565b60008060408385031215613ffd57600080fd5b6140068361386d565b9150613e0b6020840161386d565b600181811c9082168061402857607f821691505b602082108103614061577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600063ffffffff8083168181036140af576140af614067565b6001019392505050565b60ff818116838216019081111561088757610887614067565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600060ff821660ff810361411757614117614067565b60010192915050565b808202811582820484141761088757610887614067565b60008261416d577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b601f821115611399576000816000526020600020601f850160051c8101602086101561419b5750805b601f850160051c820191505b818110156141ba578281556001016141a7565b505050505050565b815167ffffffffffffffff8111156141dc576141dc613ba6565b6141f0816141ea8454614014565b84614172565b602080601f831160018114614243576000841561420d5750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b1785556141ba565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b8281101561429057888601518255948401946001909101908401614271565b50858210156142cc57878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b8082018082111561088757610887614067565b61ffff818116838216019080821115610e9d57610e9d614067565b604080825283519082018190526000906020906060840190828701845b8281101561435957815173ffffffffffffffffffffffffffffffffffffffff1684529284019290840190600101614327565b5050508381038285015284518082528583019183019060005b81811015614390578351151583529284019291840191600101614372565b5090979650505050505050565b6000816143ac576143ac614067565b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190565b600073ffffffffffffffffffffffffffffffffffffffff808716835280861660208401525083604083015260806060830152613b0f60808301846138fd565b60006020828403121561442357600080fd5b81516138668161381b565b600081516144408185602086016138d9565b9290920192915050565b6000815461445781614014565b6001828116801561446f57600181146144a2576144d1565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00841687528215158302870194506144d1565b8560005260208060002060005b858110156144c85781548a8201529084019082016144af565b50505082870194505b5050505092915050565b7f7b226964223a2200000000000000000000000000000000000000000000000000815260008951614513816007850160208e016138d9565b7f222c226e616d65223a22000000000000000000000000000000000000000000006007918401918201528951614550816011840160208e016138d9565b0161457d601182017f20230000000000000000000000000000000000000000000000000000000000009052565b61458a601382018a61442e565b7f222c2276617269616e744964223a220000000000000000000000000000000000815290506145bc600f82018961442e565b7f222c22636f6c6c656374696f6e223a2200000000000000000000000000000000815290506145ee601082018861444a565b7f222c226465736372697074696f6e223a2200000000000000000000000000000081529050614620601182018761442e565b7f222c22696d616765223a2200000000000000000000000000000000000000000081529050614652600b82018661442e565b7f222c22616e696d6174696f6e5f75726c223a220000000000000000000000000081529050614684601382018561442e565b7f222c202263726561746f72223a202254686520466162726963616e740000000081527f227d000000000000000000000000000000000000000000000000000000000000601c820152601e019b9a5050505050505050505050565b60006146eb828661444a565b84516146fb8183602089016138d9565b845191019061470e8183602088016138d9565b019594505050505056fea2646970667358221220713edb34494021dc6441c016a16c700e330edad5f3876782615fe4ecfa8685ac64736f6c63430008170033456d626c656d206f662070757269747920616e642063726f776e206f66204c69676874000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000001f4000000000000000000000000000000000000000000000000000000000000005168747470733a2f2f6c65656c612e6d7970696e6174612e636c6f75642f697066732f516d616b6b4a7744734c776f32593431683743415666416d6d4e775038777853333152714d626673516f534441662f000000000000000000000000000000